什麼是動態定時任務:是由客戶制定生成的,服務端只知道該去執行什麼任務,但任務的定時是不確定的(是由客戶制定)。
這樣總不能修改配置檔案每定製個定時任務就增加乙個trigger吧,即便允許客戶修改配置檔案,但總需要重新啟動web服務啊,研究了下 quartz在spring中的動態定時,發現
0/10 * * * * ?
中cronexpression 是關鍵,如果可以動態設定cronexpression的值,也就說如果我們可以直接呼叫crontriggerbean中設定 cronexpression的方法,就可以順利解決問題了。
熟悉1的朋友可以跳過不看,下面2、3是動態定時任務的具體實現。
1. quartz在spring中的簡單配置
spring配置檔案:
0/10 * * * * ?
0/10 * * * * ?
scheduleinfoaction中的reschedulejob ()方法及相關方法
① reschedulejob讀取資料庫,獲得自定義定時器排程時間():
private void reschedulejob() throws schedulerexception, parseexception
// 下面是具體的job內容,可自行設定
// executejobdetail();
} ② getcronexpressionfromdb():從資料庫中獲得dbcronexpression的具體**,由於使用了 scheduleinfomanager,所以要在定義相應的setter方法
private string getcronexpressionfromdb()
③ 在spring配置檔案的scheduleinfoaction配置了相應的 property(scheduler/ scheduleinfomanager), 要為其設定setter方法
private scheduler scheduler;
// 設值注入,通過setter方法傳入被呼叫者的例項 scheduler
public void setscheduler(scheduler scheduler)
private scheduleinfomanager scheduleinfomanager;
// 設值注入,通過setter方法傳入被呼叫者的例項 scheduleinfomanager
public void setscheduleinfomanager(scheduleinfomanager scheduleinfomanager)
3. quartz在spring中動態設定crontrigger方法二
在上面的2中我們可以看到,儘管已經可以動態進行reschedulejob了,不過依然需要我們設定乙個cronexpression,如果嘗 試一下拿掉spring配置中的
0/10 * * * * ?
-->
initializingcrontrigger中的相關方法
注意:在注入scheduleinfomanager屬性的時候,我們可以去讀取db任務時間(之所以放在setter方法中,是因為需要在設定 scheduleinfomanager後進行getcronexpressionfromdb(),否則,也可以①②邏輯把放在類的建構函式中).
注意initializingcrontrigger必須extends crontriggerbean.
public class initializingcrontrigger extends crontriggerbean implements serializable
private string getcronexpressionfromdb()
…… }
附表:
"0 0 12 * * ?" 每天中午12點觸發
"0 15 10 ? * *" 每天上午10:15觸發
"0 15 10 * * ?" 每天上午10:15觸發
"0 15 10 * * ? *" 每天上午10:15觸發
"0 15 10 * * ? 2005" 2023年的每天上午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" 2023年至2023年的每月的最後乙個星期五上午10:15觸發
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發
Spring定時任務
sayhello 0 08 21 下面的表示式 0 15 10 6l 2002 2005 將在2002年到2005年的每個月的最後乙個星期五上午10點15分執行作業。你不可能用 trigger來做這些事情。你可以用兩者之中的任何乙個,但哪個跟合適則取決於你的排程需要。更多詳細介紹參考此處 關於cro...
spring 定時任務
xmlns 多加下面的內容 xmlns task 然後xsi schemalocation多加下面的內容 spring task 3.1.xsd最後是我們的task任務掃瞄註解 或者 public inte ce imytestservice component import org.springf...
Spring 定時任務
scheduled cron 0 0 1 override public synchronized void dojob throws exception 字段 允許值 允許的特殊字元 秒 0 59 分 0 59 小時 0 23 日期 1 31 l w c 月份 1 12 或者 jan dec 星期...