實時更改Quartz配置

2021-08-30 18:25:59 字數 1366 閱讀 8612

b/s下的quartz應用配置涉及到三個檔案:

1.配置啟動quartz服務的web.xml;

2.配置quartz執行時環境的quartz.properties;

3.配置任務明細的任務單--job.xml.

(ps:後兩個配置檔案的名稱可變. )

問題1.

應用伺服器啟動狀態下,當對任務進行了修改時(即修改了job.xml中的任務明細),quartz無法響應這種變化.也就是說,quartz並沒有進行"有狀態"作業!

需求:無論是修改了任務明細中的引數列表--jobdatamap,或是cronexpression中的定時表示式,都應該立即做出響應,並按照新的配置引數去執行這個任務.

解決: 

在quartz.properties中加入下面兩行配置即可:

#自動掃瞄任務單並發現改動的時間間隔,單位為秒

org.quartz.plugin.jobinitializer.scaninterval = 10

#覆蓋任務排程器中同名的jobdetail,避免只修改了cronexpression所造成的不能重新生效情況

org.quartz.plugin.jobinitializer.overwriteexistingjobs = true

問題2:

測試任務單變更自檢的問題時,突然發現,當通過web頁面提供的任務配置介面進行報表訂閱任務的新增、修改等操作時,由於job.xml是在classes目錄下,所以tomcat會進行自動的reload(hot deploy).這看起來好象沒什麼問題,但在實際的應用環境下卻非常危險,因為web.xml中配置的隨tomcat啟動而啟動的程式都會reload.可能這些程式很簡單,並不會產生什麼問題,但我們的軟體則不同,隨tomcat的啟動,會有很多服務被啟動並進行著極為複雜的操作,所以classes目錄下的程式配置項都不會輕易修改.即使是修改,那也會重新啟動tomcat使服務正常運轉. 修改了任務單後發現某個服務出現了illegal access問題.

解決:job.xml無論如何變更,tomcat都不會reload,因為它已經不在classes目錄下了。

問題3:

在debug過程中,發現quartz的乙個小問題,可能會對資源造成無謂的占用,那就是當乙個任務從job.xml中被刪除時,quartz是不會響應這種減少任務的改變且此任務的程序仍然被占用,而且任務還會被執行。

解決:可以考慮在jobdatamap中增加是否執行的配置項,即使任務會執行,但根據這種配置項,仍然可以拒絕下一步的操作.當然了,修改cronexpression使之成為乙個永遠不會執行到的時間也是乙個辦法.

問題4:

如何使quartz載入多個job.xml

解決:實現schedulerplugin介面並提供多工檔案載入功能,將會是解決這個事情的好方法.

quartz配置總結

quartz配置總結 由於專案需要,這2天在spring中新增了quartz計畫任務,目的是自動檢測某個目錄是否接收到了新檔案。需要的配置有如下幾項 1.spring包裡有quartz的擴充套件,但是沒有包含quartz的包,不要忘了一起放到lib目錄下。2.在spring的配置檔案中,新增計畫任務...

quartz 時間配置

1 crontrigger時間格式配置說明 crontrigger配置格式 格式 秒 分 小時 日 月 周 年 序號說明 是否必填 允許填寫的值 允許的萬用字元1秒 是0 59 2分 是0 59 3小時 是0 23 4日 是1 31 l w5月 是1 12 or jan dec 6周 是1 7 or...

quartz時間配置

時間配置 時間格式 秒 分 時 日 月 周 年 是否必填 允許填寫的值 允許的萬用字元 秒 是 0 59 分 是 0 59 時 是 0 23 日 是 1 31 l w 月 是 1 12 or jan dec 周 是 1 7 l 年 否 empty 或 1970 2099 萬用字元解釋 所有值 不指定...