1. 程式人生 > >Spring任務排程實戰之Quartz Simple Trigger

Spring任務排程實戰之Quartz Simple Trigger

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

本文地址:http://blog.csdn.net/kongxx/article/details/6751300

在spring中對任務排程的整合除了使用JDK自帶的Timer和TimerTask類來實現簡單任務排程以外,也可以使用企業級的開源作業排程框架Quartz來實現,下面是一個小例子:

1. 首先是一個任務類,這個類沒有實現任何介面,其中包含一個run方法用來執行這個task,程式碼如下:

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; }}
2. 一個Job類,這個類需要繼承spring的QuartzJobBean類,來說明當前類是一個Quartz的Job類,類包含了一個Task類的物件例項,在每次Job被排程的時候,將會執行其中的executeInternal方法,程式碼如下:

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; }}
3. Spring配置檔案,內容如下

<?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秒執行一次。











           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述