Spring 整合 Quartz 實現動態定時任務

Spring 整合 Quartz 實現動態定時任務

代碼倉庫地址:github.com/hanglegehan…

  1. 動態增長定時任務
  2. 對定時任務進行修改
  3. 暫停定時任務
  4. 恢復暫停的定時任務

Quartz能夠用來作什麼?
Quartz是一個任務調度框架。好比你遇到這樣的問題html

想每個月25號,信用卡自動還款git

想每一年4月1日本身給當年暗戀女神發一封匿名賀卡github

想每隔1小時,備份一下本身的愛情動做片 學習筆記到雲盤spring

這些問題總結起來就是:在某一個有規律的時間點幹某件事。而且時間的觸發的條件能夠很是複雜(好比每個月最後一個工做日的17:50),複雜到須要一個專門的框架來幹這個事。 Quartz就是來幹這樣的事,你給它一個觸發條件的定義,它負責到了時間點,觸發相應的Job起來幹活。tomcat

可是不少時候,咱們經常會遇到須要動態的添加或修改任務,而spring中所提供的定時任務組件卻只可以經過修改xml中trigger的配置才能控制定時任務的時間以及任務的啓用或中止,這在帶給咱們方便的同時也失去了動態配置任務的靈活性。最理想的是在與spring整合的同時又能實現動態任務的添加、刪除及修改配置。bash

ps:項目基於Maven

演示方法:用tomcat部署

1. 查看已經部署的定時任務
http://localhost:8080/list
2. 初始化定時任務
http://localhost:8080/init
3. 暫停定時任務
http://localhost:8080/stop
4. 恢復暫停的定時任務
http://localhost:8080/resume複製代碼

spring/spring.xml 配置框架

  1. 傳統方式
<!-- 使用MethodInvokingJobDetailFactoryBean,任務類能夠不實現Job接口,經過targetMethod指定調用方法-->
    <bean id="taskJob" class="cn.huashantech.lawyer.service.DataConversionTask"/>

    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!--false表示等上一個任務執行完後再開啓新的任務-->
        <property name="concurrent" value="false"/>
        <property name="targetObject" ref="taskJob"/>
        <property name="targetMethod" value="run"/>
    </bean>

    <!--  調度觸發器 -->
    <bean id="myTrigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail"/>
        <property name="cronExpression" value="0/5 * * * * ?"/>
    </bean>複製代碼
  1. 動態方式所需配置
<!-- 調度工廠 -->
    <bean  id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">複製代碼

核心類

cn.huashantech.lawyer.service.DynamicTask.Main學習

//以註解方式注入調度工廠
@Autowired
private Scheduler scheduler;複製代碼

關於Quartz詳細解釋參考:www.cnblogs.com/drift-ice/p…spa

借鑑來源:blog.csdn.net/u014723529/….net

相關文章
相關標籤/搜索