Quartz事物调度

来源:互联网 发布:指纹识别芯片 算法 编辑:程序博客网 时间:2024/05/29 10:15


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。