Quartz配置简介
Quartz配置简介
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过Spring来集成Quartz。
Quartz官方网址:http://www.opensymphony.com/quartz
基本概念:
1. Job:Job是Quartz中的一个接口,顾名思义,它指定了我们需要执行的任务。下面是一个简单的Job实现:
|
java代码: |
|
import org.quartz.Job; public class DumbJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { } |
需要注意的是Job实现类必须有一个无参数的构造函数,我们也从来不需要自己去实例化一个Job。Quartz负责具体的Job调度与执行。
2. JobDetail:JobDetail是一个具体的类,它用于描述Job,示例如下:
JobDetail jobDetail = new JobDetail(“myJob”, “myGroup”, DumbJob.class);
上面初始化了一个名字为“myJob”的JobDetail,它在“myGroup”组中。注意,这里并没有Job的实例出现,我们只需要传入Job的class(这里是DumbJob.class)。
3. Trigger:触发器,它用于定义Job何时执行。最常用的是SimpleTrigger和CronTrigger。一般来说,如果你需要在一个固定的时间和重复次数或者一个固定的间隔时间,那么SimpleTrigger比较合适;如果你有许多复杂的作业调度,那么CronTrigger比较合适。 CronTrigger和Unix的cron机制基本一样,我们需要的只是一个cron表达式。比如“0 0 12 * * ?”会在每天中午12点触发Job执行;“0 15 10 ? * 6L”会在每个月的最后一个星期五的早上10:15触发Job执行。
4. Scheduler和SchedulerFactory:Scheduler负责管理Trigger、调度Job,SchedulerFactory则是Scheduler工厂,负责生成Scheduler。
|
java代码: |
|
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); JobDetail jobDetail = new JobDetail(“myJob”, null, DumbJob.class); sched.scheduleJob(jobDetail, trigger); |
使用Spring集成Quartz:
本系统使用Spring来集成Quartz。我们只需要在Spring中配置相应的Trigger和Job,而不需要编写任何Java代码,Spring在找到这些bean后会自动启动这些Job。下面是CLS系统中的部分配置:
|
Spring配置: |
|
<bean id=”dumbJob” class=”org.springframework.scheduling.quartz.JobDetailBean”>
<bean id=”settlementJob” class=”org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean”>
|
首先我们需要配置一个Job,这里有两种方式:一种是为Job创建一个独立的JobClass,然后使用Spring的JobDetailBean配置该Job;另一种是使用MethodInvokingJobDetailFactoryBean指定一个方法,不需要一个单独的JobClass,它需要设置“targetObject”和“targetMethod”,则Trigger触发该Job的时候,目标方法会被调用。这里把“concurrent”设置为“false”,这被调用的方法不会在新线程里运行,而是顺序执行。
接下来我们配置了一个名为“settlementTrigger”的Cron触发器,它定义了settlementJob合适被调用。
最后需要配置的是SchedulerFactoryBean,它负责调度所有的trigger,还可以配置Quartz。因为当前的任务间隔较远,没有频繁执行的要求,所以这里把Quartz的线程数设为“1”。
下面是一个最简单的Quartz调用:
|
java代码: |
|
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); JobDetail jobDetail = new JobDetail(“myJob”, null, DumbJob.class); sched.scheduleJob(jobDetail, trigger); |
使用Spring集成Quartz:
本系统使用Spring来集成Quartz。我们只需要在Spring中配置相应的Trigger和Job,而不需要编写任何Java代码,Spring在找到这些bean后会自动启动这些Job。下面是CLS系统中的部分配置:
|
Spring配置: |
|
<bean id=”dumbJob” class=”org.springframework.scheduling.quartz.JobDetailBean”>
<bean id=”settlementJob” class=”org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean”>
|
首先我们需要配置一个Job,这里有两种方式:一种是为Job创建一个独立的JobClass,然后使用Spring的JobDetailBean配置该Job;另一种是使用MethodInvokingJobDetailFactoryBean指定一个方法,不需要一个单独的JobClass,它需要设置“targetObject”和“targetMethod”,则Trigger触发该Job的时候,目标方法会被调用。这里把“concurrent”设置为“false”,这被调用的方法不会在新线程里运行,而是顺序执行。
接下来我们配置了一个名为“settlementTrigger”的Cron触发器,它定义了settlementJob合适被调用。
最后需要配置的是SchedulerFactoryBean,它负责调度所有的trigger,还可以配置Quartz。因为当前的任务间隔较远,没有频繁执行的要求,所以这里把Quartz的线程数设为“1”。


Twitter
Google Profile
Picasa Web Album
Google Reader
Flickr
豆瓣网
有话请说,有屁请憋住!