一个简单的Quartz实现

来源:互联网 发布:淘宝q币货源 编辑:程序博客网 时间:2024/06/13 23:49
概念:
Job——表示一个工作,要执行的具体内容。
        接口中只有一个方法: void execute(JobExecutionContext context)  throws JobExecutionException;
        JobExecutionContext 是包含各种永远任务调度环境的信息(如源码截图):

JobDetail——表示一个具体的可执行的调度程序,Job是这个可执行调度程序所要执行的内容。另外JobDetail还包含了这个任务调度的方案和策略。

Trigger——代表一个调度参数配置。例如什么时候调度等。

Scheduler——代表一个任务调度器,一个任务调度器可以注册多个JobDetail 和 Trigger 。当JobDetail和Trigger组合就可以被Scheduler容器调度了。


实现任务调度,需要实现Job

public class HelloJob extends LoggerUtils implements Job {

public HelloJob() {
}

/*
 * (non-Javadoc)
 * 
 * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
 */
public void execute(JobExecutionContext context)
throws JobExecutionException {
                //这里使用了slf4g日志包,它支持参数化日志,不错的日志接口。
this.logger.info("第一个quartz {} job 执行时间为{}", "job excute ", new Date());
}

public void run() throws SchedulerException, InterruptedException {
//创建一个任务调度器
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
// quartz 中的时间帮助静态类
Date runTime=new Date();
//Date runTime = DateBuilder.evenMinuteDate(new Date());
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1",
"group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1",
"group1").startAt(runTime).build();
//设置任务调度触发一个job的执行时间
sched.scheduleJob(job, trigger);
logger.info(job.getKey() + "will run at :" + runTime);
//启动任务调度
sched.start();

Thread.sleep(10L * 1000L);
//停止调度
sched.shutdown(true);
}

public static void main(String[] args) throws SchedulerException,
InterruptedException {
HelloJob helloJob = new HelloJob();
helloJob.run();
}
}

创建一个简单quartz的步骤:
  1. 创建一个scheduler(任务调度器-容器)——Scheduler 对象
  2. 创建一个工作明细JobDetail (设置一个工作明细 job)
  3. 创建一个触发器Trigger (设定何时触发一个job)
  4. 将JobDetail 和 Trigger 加入任务调度器中
  5. 启动任务调度器scheduler.start();
  6. 关闭任务调度器scheduler.shutdown();
使用到的jar包有:


1 0
原创粉丝点击