摘要:在項(xiàng)目的管理功能中,對(duì)定時(shí)任務(wù)的管理有時(shí)會(huì)很常見(jiàn)。但一般定時(shí)任務(wù)配置都在xml中完成,包括cronExpression表達(dá)式,十分的方便。但是如果我的任務(wù)信息是保存在數(shù)據(jù)庫(kù)的,想要?jiǎng)討B(tài)的初始化,還有就是任務(wù)較多的時(shí)候不是得有一大堆的xml配置?或者說(shuō)我要修改一下trigger的表達(dá)式,使原來(lái)5秒運(yùn)行一次的任務(wù)變成10秒運(yùn)行一次,或者說(shuō)我要控制定時(shí)任務(wù)的 “ 暫停 ” 呢?暫停之后又要在某個(gè)時(shí)間點(diǎn) “ 重啟 ” 該定時(shí)任務(wù)呢?或者說(shuō)直接 “ 刪除 ” 該定時(shí)任務(wù)呢?要 改變某定時(shí)任務(wù)的觸發(fā)時(shí)間呢?這時(shí)問(wèn)題就來(lái)了,試過(guò)在配置文件中不傳入cronExpression等參數(shù),但是啟動(dòng)時(shí)就報(bào)錯(cuò)了,難道我每次都修改xml文件然后重啟應(yīng)用嗎,這顯然不合適的。
最理想的是在與spring整合的同時(shí)又能實(shí)現(xiàn)動(dòng)態(tài)任務(wù)的添加、刪除及修改配置,而且不需要重啟應(yīng)用。
首先我們來(lái)回顧一下spring中使用quartz的配置代碼:
<!-- 使用MethodInvokingJobDetailFactoryBean,任務(wù)類可以不實(shí)現(xiàn)Job接口,通過(guò)targetMethod指定調(diào)用方法--><bean id="taskJob" class="com.tyyd.dw.task.DataConversionTask"/><bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="group" value="job_work"/> <property name="name" value="job_work_name"/> <!--false表示等上一個(gè)任務(wù)執(zhí)行完后再開(kāi)啟新的任務(wù)--> <property name="concurrent" value="false"/> <property name="targetObject"> &