spring動態定時任務

2021-08-30 19:55:16 字數 2584 閱讀 9794

什麼是動態定時任務:是由客戶制定生成的,服務端只知道該去執行什麼任務,但任務的定時是不確定的(是由客戶制定)。

這樣總不能修改配置檔案每定製個定時任務就增加乙個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 星期...