简单介绍Spring+Quartz实现定时任务的配置方法

       Quartz是一个任务进度管理器,可以与任何其他软件系统集成或者一起使用。是用一个小Java库发布的文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。

        以top调用错误统计定时发送邮件任务为例介绍Quartz定时任务的Spring依赖注入配置方法:

        1.定时目标类TaoReportTask的bean配置(详见eshop/eshop/src/bean/spring-app-task.xml)。

                   <bean id="taoReportTask" class="com.alibaba.eshop.task.tool.task.TaoReportTask">

                    <property name="taskHost">

                        <!—执行任务的服务器的ip -->

                      <value>${task.taoreport.ip}</value>

                    </property>

                    <property name="manager">

                       <ref bean="manager"/>

                    </property>

                    <property name="mailSender" ref="mailSender" />

                 </bean>

        2.Scheduler的配置(详见eshop/neweshop/src/spring/spring-task-quartz.xml),Scheduler包含一个Trigger列表,每个Trigger表示一个作业。

                <bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"autowire="no">

                   <property name="triggers">

                       <list>

                                <!-- 淘宝错误统计作业-->

                          <ref bean="doTaoReportTrigger"></ref>

                       </list>

                     </property>

                    <property name="configLocation" value="classpath:quartz.properties"/>

                 </bean>

 

         3.Trigger的配置(详见eshop/eshop/src/bean/spring-app-task.xml)。

            <bean id="doTaoReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

                  <property name="jobDetail">

                     <ref bean="doTaoReportJobDetail"/>

                  </property>

                  <property name="cronExpression">

                <!—Cron表达式,表示每天凌晨执行一次任务 -->

                     <value> 0 0 0 * * ?</value>

                  </property>

        </bean>

        说明:

                 1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

                      字段名                 允许的值                        允许的特殊字符  

                       秒                         0-59                               , - * /  

                       分                         0-59                               , - * /  

                      小时                   0-23                                  , - * /  

                      日                         1-31                               , - * ? / L W C  

                      月                         1-12 or JAN-DEC          , - * /  

                      周几                     1-7 or SUN-SAT            , - * ? / L C #  

                     年 (可选字段)     empty, 1970-2099             , - * /

                   “?”字符:表示不确定的值

                   “,”字符:指定数个值

                   “-”字符:指定一个值的范围

                   “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

                   “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

                  “W”字符:指定离给定日期最近的工作日(周一到周五)

                   “#”字符:表示该月第几个周X。6#3表示该月第3个周五

                 2)Cron表达式范例:

                     每隔5秒执行一次:*/5 * * * * ?

                     每隔1分钟执行一次:0 */1 * * * ?

                     每天23点执行一次:0 0 23 * * ?

                     每天凌晨1点执行一次:0 0 1 * * ?

                     每月1号凌晨1点执行一次:0 0 1 1 * ?

                     每月最后一天23点执行一次:0 0 23 L * ?

                     每周星期天凌晨1点实行一次:0 0 1 ? * L

                     在26分、29分、33分执行一次:0 26,29,33 * * * ?

                     每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

     4. JobDetail配置(详见eshop/eshop/src/bean/spring-app-task.xml),其中C2CMethodInvokingJobDetailFactoryBean 继承了spring中的  

        org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean。

    <bean id="doTaoReportJobDetail"

        class="com.alisoft.c2c.aop.C2CMethodInvokingJobDetailFactoryBean">

         <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 --> 

        <property name="concurrent">

            <value>false</value>

        </property>

        <!—任务目标类 --> 

        <property name="targetObject">

            <ref bean="taoReportTask" />

        </property>

      <!—任务目标类要调用的方法-->

        <property name="targetMethod">

            <value>doTopReport</value>

        </property>

     </bean>

posted @ 2012-06-14 15:42  Liter  阅读(1130)  评论(0编辑  收藏  举报