spring 定時器 補充

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=http://www.cnblogs.com/litu/archive/2012/06/14/"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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章