引言
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。
Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。
核心概念
- Schedule 调度器,quartz核心API,包含其他的组件一起完成工作。
- Job 是一个接口,在实现类里面完成自己特定的任务。
- JobDetail 使用用Job来定义,可以作为组件包含在调度器schedul中。
- Trigger 触发器,定义调度器何时执行任务。
- JobBuilder 用来生成JobDetail的工具类
- TriggerBuilder 用来生产Trigger的工具类
第一个程序
执行任务的类
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(new Date() + " Hello Quartz!");
}
定时执行任务
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//注意启动任务调度器
scheduler.start();
//创建一个name为myJob,分组在group1的任务
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.build();
//创建一个执行任务的触发器,每两秒钟触发一次任务
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
//把任务调度器和触发器关联起来
scheduler.scheduleJob(jobDetail, trigger);
执行结果:
Fri Mar 24 14:49:57 CST 2017 Hello Quartz!
Fri Mar 24 14:49:59 CST 2017 Hello Quartz!
Fri Mar 24 14:50:01 CST 2017 Hello Quartz!
Fri Mar 24 14:50:03 CST 2017 Hello Quartz!
Fri Mar 24 14:50:05 CST 2017 Hello Quartz!
从执行结果来看确实是每两秒钟执行一次任务。
到此,一个类此Hello World的Quartz任务调度器就算完成了。