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 * * * ? 那麼這個就是在第五分鐘到第六分鐘 每秒都執行一次
直接複製上用吧 專案趕的可以直接複製上 用就完了.