Spring任務排程實戰之Quartz Simple Trigger
阿新 • • 發佈:2018-11-16
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
本文地址:http://blog.csdn.net/kongxx/article/details/6751300
在spring中對任務排程的整合除了使用JDK自帶的Timer和TimerTask類來實現簡單任務排程以外,也可以使用企業級的開源作業排程框架Quartz來實現,下面是一個小例子:
1. 首先是一個任務類,這個類沒有實現任何介面,其中包含一個run方法用來執行這個task,程式碼如下:
2. 一個Job類,這個類需要繼承spring的QuartzJobBean類,來說明當前類是一個Quartz的Job類,類包含了一個Task類的物件例項,在每次Job被排程的時候,將會執行其中的executeInternal方法,程式碼如下:package org.garbagecan.springstudy.schedule.quartz;public class MyTask { private String name; public void run() { System.out.println("Run task: " + name + "."); } public String getName() { return name; } public void setName(String name) { this.name = name; }}
3. Spring配置檔案,內容如下package org.garbagecan.springstudy.schedule.quartz;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.scheduling.quartz.QuartzJobBean;public class MyJob extends QuartzJobBean { private MyTask myTask; protected void executeInternal(JobExecutionContext context) throws JobExecutionException { myTask.run(); } public MyTask getMyTask() { return myTask; } public void setMyTask(MyTask myTask) { this.myTask = myTask; }}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" default-lazy-init="true"> <bean id="timerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"> <property name="triggers"> <list> <ref local="simpleTrigger"/> </list> </property> </bean> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="myJob" /> <property name="startDelay" value="0" /> <property name="repeatInterval" value="10000" /> </bean> <bean id="myJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="name" value="myJob"/> <property name="group" value="myGroup"/> <property name="description" value="myJob"/> <property name="jobClass" value="org.garbagecan.springstudy.schedule.quartz.MyJob"/> <property name="jobDataAsMap"> <map> <entry key="myTask" value-ref="myTask" /> </map> </property> </bean> <bean id="myTask" class="org.garbagecan.springstudy.schedule.quartz.MyTask"> <property name="name" value="my task"/> </bean> </beans>
3.1 首先,需要定義了一個Task類,具體的任務邏輯可以寫在這個類裡;
3.2 定義一個JobDetailBean類的bean,這個是為了適應Quartz的JobDetail,其中可以定義name,group,description等資訊,這些資訊主要是為了和別的作業做區分使用;其中還有一個jobClass屬性,定義了使用的是那個Job類例項,這裡使用第二步建立的MyJob類;最後定義了一個叫jobDataAsMap的屬性,這個屬性是Quartz提供的用來傳遞引數使用的一個Map集合,這些集合裡的類會被spring自動注入到目標Job類中;
3.3 建立一個觸發器類,這裡使用的是Quartz提供的Simple Trigger,在Spring裡,使用的是SimpleTriggerBean來做對映,主要是定義了第一次執行的延時時間,每次重複執行之間的間隔,當然還有最主要的具體的Job類例項;
3.4 最後定義了一個SchedulerFactoryBean的bean,其中定義了具體要排程那些觸發器;
4. 最後,寫一個測試類來測試上面的程式碼和配置
package org.garbagecan.springstudy.schedule.quartz;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) throws Exception { new ClassPathXmlApplicationContext("/org/garbagecan/springstudy/schedule/quartz/spring.xml"); }}
執行Test類,可以看到一個叫my task的job會啟動,並且每隔10秒執行一次。