Quartz是什么?
Quartz是一个用Java编写的任务调度框架。
任务调度是什么?
举例说明:比如我们需要在每个星期四下午三点时候发周报,我们需要一个系统在两点半的时候给我们一个发周报的提醒,这个提醒就是一次任务,每周星期四下午两点半的时候自动触发这个任务,这就可以理解为这个系统的一次任务调度。在比如我们的系统心跳数据包的发送,判断一个用户是否在操作等等。Quartz 提供给我们定时调度已定义好的任务的能力。
如果你了解quartz的调度计划cronExpression表达式的配置,你会感叹quartz的灵活与强大。
Quartz的简单使用
先下只介绍spring 和quartz的整合使用。
一个利用Quartz来进行任务调度的典型配置,Quartz的spring配置:
<bean id="testTask" class="com.alisoft.xx.TestTask" /> //要用到的一个类
<bean id="xxJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="concurrent">
<value>false</value>
</property>
<property name="targetObject"> //目标类
<ref bean="testTask"/>
</property>
<property name="targetMethod"> //目标方法(注意,该方法必须没有参数)
<value>execute</value>
</property>
</bean>
<!-- SimpleTriggerBean可以用org.springframework.scheduling.quartz.CronTriggerBean代替 -->
<bean id="xxTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="xxJobDetail"/>
</property>
<!--延迟 1 seconds 开始-->
<property name="startDelay">
<value>1000</value>
</property>
<!--重复6 seconds开始-->
<property name="repeatInterval">
<value>60000</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="xxTriggerBean"/>
</list>
</property>
</bean>
其实quartz的使用主要有三个部分,一个调度器Scheduler,一个要被调度的任务JobDetail,一个触发器Trigger,对上面的配置做一说明,在图中从下到上:
1、 配置一个job,这个job就是我们要调度的任务类,
2、配置jobDetail,jobDetail需要加载job实现类,并且指定目标方法即完成任务需要执行的方法为execute,在这个方法里面定义我们要做的任务,execute方法需要我们在job类中实现。
3、配置trigger,用于触发我们定义的任务,在触发器的配置中,我们需要加载需要调度的任务jobDetail,当然还要配置好我们需要触发的时间,触发的时间配置在cronExperssion表达式中,这个表达式非常灵活与强大,举个例子:我们需要每个工作日早八点到晚八点之间,每半个小时触发一次任务,我们可以将表达式配置为:0 0/30 8-20 ? * MON-FRI。这个表达式的详细解释可以登录Hudson报表系统(链接:http://10.232.29.21:8080/hudson-report/),点击邮件信息维护里面的“邮件发送时间计划配置帮助”查看。
4、配置scheduler,只需要加载trigger即可,可以在list标签下配置多个trigger。注意,scheduler的配置中有个lazy- init=false的配置,这表明只要我们的spring一启动,quartz的scheduler也跟着启动,否则其值为true的话,会因为惰性加载的问题,导致quartz不起作用,此项默认值是false。