Spring4定時器 cronTrigger和simpleTrigger實現方法 -开发者知识库

Spring4定時器 cronTrigger和simpleTrigger實現方法 -开发者知识库,第1张

spring4定時器 cronTrigger和simpleTrigger實現方法

Quartz 是個開源的作業調度框架,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。Quartz 允許開發人員根據時間間隔(或天)來調度作業。它實現了作業和觸發器的多對多關系,還能把多個作業與不同的觸發器關聯。整合了 Quartz 的應用程序可以重用來自不同事件的作業,還可以為一個事件組合多個作業。

      SimpleTrigger  當需要在規定的時間執行一次或在規定的時間段以一定的時間間隔重復觸發執行Job時,SimpleTrigger就可以滿足要求;SimpleTrigger的屬性有:開始時間、結束時間、重復次數和重復的時間間隔,重復次數屬性的值可以為0、正整數、或常量 SimpleTrigger.REPEAT_INDEFINITELY,重復的時間間隔屬性值必須為0或長整型的正整數,以毫秒作為時間單位,當重復的時 間間隔為0時,意味着與Trigger同時觸發執行(或幾乎與Scheduler開始時同時觸發執行)。如果有指定結束時間屬性值,則結束時間屬性優先於重復次數屬性,這樣的好處在於:當我們需要創建一個每間隔10秒鍾觸發一次直到指定的結束時間的 Trigger,而無需去計算從開始到結束的所重復的次數,我們只需簡單的指定結束時間和使用REPEAT_INDEFINITELY作為重復次數的屬性 值即可(我們也可以指定一個比在指定結束時間到達時實際執行次數大的重復次數)。

     CronTrigger  支持比 SimpleTrigger 更具體的調度,而且也不是很復雜。基於 cron 表達式,CronTrigger 支持類似日歷的重復間隔,而不是單一的時間間隔。

Cron 表達式包括以下 7 個字段

格式: [秒] [分] [小時] [日] [月] [周] [年]
序號     說明       是否必填      允許填寫的值       允許的通配符
 1           秒               是                  0-59                   , - * /
 2           分               是                  0-59                   , - * /
 3          小時            是                  0-23                    , - * /
 4          日               是                  1-31                     , - * ? / L W
 5          月               是           1-12 or JAN-DEC        , - * /
 6          周              是            1-7 or SUN-SAT          , - * ? / L #
 7          年               否         empty 或 1970-2099      , - * /

 

Quartz官方網站對SimpleTrigger和CronTrigger的簡單對比: 
     SimpleTrigger is handy if you need 'one-shot' execution (just single execution of a job at a given moment in time), or if you need to fire a job at a given time, and have it repeat N times, with a delay of T between executions.當你需要的是一次性的調度(僅是安排單獨的任務在指定的時間及時執行),或者你需要在指定的時間激活某個任務並執行N次,設置每次任務執行的間隔時間T。那此時使用SimpleTrigger將是非常方便的。 

    CronTrigger is useful if you wish to have triggering based on calendar-like schedules - such as "every Friday, at noon" or "at 10:15 on the 10th day of every month."如果你需要安排的任務時基於日期的-比如"每個星期五正午"或者"每個月10號的10:15",使用CronTrigger將是非常有用的。

1、配置applicationcontext.xml

<!-- cronTrigger實現方式 -->
<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.ouku.entities.report.ReportTimerTask" />
        <property name="jobDataAsMap">
            <map>
                <entry key="timeout" value="3600" />
            </map>
        </property>
    </bean>
    <bean id="springUtil" class="com.ouku.util.SpringUtil" />
    <bean id="cronTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="exampleJob" />
        <!-- run every morning at 6 AM -->
        <!-- <property name="cronExpression" value="0 0 6 * * ?" /> -->
       <!-- <property name="cronExpression" value="0 0/1 * * * ?" /> --><!-- 每分鍾 -->
        <property name="cronExpression" value="0/5 * * * * ?" /> <!-- 每秒 -->
    </bean>

    <bean id="exampleBusinessObject" class="com.ouku.entities.report.ReportTimerTaskTwo" />
    <bean id="jobDetail"
<!-- simpleTrigger實現方式 -->
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="exampleBusinessObject" />
        <property name="targetMethod" value="doIt" />
        <property name="concurrent" value="false" />
    </bean>
    <bean id="simpleTrigger"
          class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <!-- see the example of method invoking job above -->
        <property name="jobDetail" ref="jobDetail" />
        <!-- 0 seconds -->
        <property name="startDelay" value="0" />
        <!-- repeat every 5 seconds -->
        <property name="repeatInterval" value="5000" />
    </bean>

    <!-- 總調度用於啟動Spring定時器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复