1. 程式人生 > >spring引入quartz做定時任務 MethodInvokingJobDetailFactoryBean的方法

spring引入quartz做定時任務 MethodInvokingJobDetailFactoryBean的方法

spring整合quartz的方法有兩個 下面我們將用 MethodInvokingJobDetailFactoryBean進行整合一遍 任務類可以不實現Job介面,通過targetMethod指定呼叫方法-

1.引入pom檔案中的依賴

<dependency>
     <groupId>org.quartz-scheduler</groupId>
     <artifactId>quartz</artifactId>
     <version>2.2.1</version>
 </dependency>

2.在你的spring.xml檔案中引入bean

	 <!-- 任務排程器job -->
  
	<bean id="checkSaleJob" class="com.dtyun.csfw.task.CheckSaleJob"/>
	<!-- 使用MethodInvokingJobDetailFactoryBean,任務類可以不實現Job介面,通過targetMethod指定呼叫方法-->
	<!-- jobDetail -->
	<bean id="oceanJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	    <property name="targetObject" ref="checkSaleJob"/>
	    <property name="targetMethod" value="check"/>
         <!-- 上一次未執行完成的,要等待有再執行。 -->
	    <property name="concurrent" value="false"/>
	</bean>
	<!-- Trigger-->
	<bean id="oceanStatusCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
	    <property name="jobDetail" ref="oceanJob"/>
	   	 <!-- 時間設定  下面有解說。 -->
	    <property name="cronExpression" value="0/1 * * * * ?"/>
	</bean>
	<!--Scheduler -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	    <property name="triggers">
	        <list>
	            <ref bean="oceanStatusCronTrigger"/>
	        </list>
	    </property>
	</bean>

3.直接在你的工程中寫一個類 CheckSaleJob 這裡說明一下 因為我的配置檔案中配置的是targetMethod那兒的class路徑可以自己換成自己的class類路徑 那兒的targetMethod 配置的是我那個targetMethod類中的check的方法  所以也必須替換你們自己寫的方法 不然不會生效

public class CheckSaleJob {
	
	public void check() {
		System.out.println("別跑,我tm是來檢查工作的...."+System.currentTimeMillis());
		//再加上你的業務邏輯 就像你工程的類一樣  可以注入啥的都可以
	}

}

4.quartz中的時間的設定 至少有6個字元(或者7個字元),空格作為間隔, 通常 0 * * * * * ?格式:

第一個字元是秒

第二個字元是分

第三個字元是時

第四個字元是天(0~31,但是你需要考慮你月的天數)

第五個字元是月

第六個字元(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

第七個字元是年

其中每個元素可以是一個值(如6),一個連續區間(9-12),一個間隔時間(8-18/4)(/表示每隔4小時),一個列表(1,3,5),萬用字元。由於"月份中的日期"和"星期中的日期"這兩個元素互斥的,必須要對其中一個設定?.

0 0 10,14,16 * * ? 每天上午10點,下午2點,4點整觸發 0 0/30 9-17 * * ?   朝九晚五工作時間內每半小時觸發 0 0 12 ? * WED 表示每個星期三中午12點 觸發 "0 0 12 * * ?" 每天中午12點觸發  "0 15 10 ? * *" 每天上午10:15觸發  "0 15 10 * * ?" 每天上午10:15觸發  "0 15 10 * * ? *" 每天上午10:15觸發  "0 15 10 * * ? 2005" 2005年的每天上午10:15觸發  "0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發  "0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發  "0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發  "0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發  "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發  "0 15 10 ? * MON-FRI" 週一至週五的上午10:15觸發  "0 15 10 15 * ?" 每月15日上午10:15觸發  "0 15 10 L * ?" 每月最後一日的上午10:15觸發  "0 15 10 ? * 6L" 每月的最後一個星期五上午10:15觸發  "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最後一個星期五上午10:15觸發  "0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發 

下面

  每隔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 * * ?

專案中用到的查了一下

0 0/5 * * * ? 五分鐘執行一次

0 */5 * * * ?  那麼這個就是在第五分鐘到第六分鐘 每秒都執行一次

直接複製上用吧 專案趕的可以直接複製上 用就完了.