關於quartz可以設定為序列執行的比較詳細說明

2021-07-14 12:24:41 字數 2247 閱讀 3026

quartz本身和spring都提供了設定quartz任務序列的解決辦法。

沒有用spring的情況:

方法1,task實現statefuljob介面。這個介面在quartz2.0的時候作廢了,現在建議使用註解的方式完成序列的配置,不過這個介面依然有效,因為2.0版本的這個介面使用了@disallowconcurrentexecution和@persistjobdataafterexecution的註解。

方法2,註解@disallowconcurrentexecution。這個代表設定該任務為序列執行。

另外:註解@persistjobdataafterexecution。這個代表該任務可以支援在任務間使用jobdatamap傳遞資訊,在任務結束時儲存資訊,不必設定為序列。但如果並行任務使用該註解可能會讓jobdatamap中的內容產生不可預知的結果,所以還是強烈建議使用該註解的同時使用@disallowconcurrentexecution註解。

然後任務的定義大概是這樣的:

@persistjobdataafterexecution

@disallowconcurrentexecution

public class billingbilltask extends job elseelse{

system.out.println("key!=null");

system.out.println(map.get("key"));

注:1,  task類需要繼承quartzjobbean。

2,  這個類在

spring

中沒有提供讓

quartz

作業序列執行的配置。如果用了這個類還要序列執行的話,使用@disallowconcurrentexecution註解吧。

3,  如果設定了序列執行,jobdetail中的jobdatamap可以在多次執行的任務中傳遞內容,不會因為任務結束而清空。

第二個類:methodinvokingjobdetailfactorybean。

使用這個類,配置檔案大概是這樣的:

task的定義大概是這樣的:

public class billingbilltask{

public static int test=1;

publicvoid executeinternal()throws jobexecutionexception {

test++;

注:1,中的ref不能直接寫成value=」com.dangdang.tms.job.schedule.bms.billingbilltask」這種形式,必須得下面再寫個id=」billingbilltask」,原因沒研究過。

2,這種配置中設定的executeinternal方法必須是無引數的,如果設定了引數就會報找不到方法的異常。

4,  這種配置中,即使設定了序列執行,無法使用

jobdatamap

來在序列的任務中傳遞引數,如果需要傳遞引數的話,另想辦法。比如定義乙個靜態變數之類的。

有misfirethreshold引數,定義過期時間。

quartz中預設的misfirethreshold是60000,也就是60秒。

我對這個引數的理解是,乙個在序列的時候後面任務被阻礙多久就放棄的引數,比如:

設定該引數為10秒,定時任務序列執行,20秒執行一次。

如果第乙個任務0秒開始執行,執行到第25秒結束,第二個定時任務應該20s時開始執行,但拖到了25s,與執行時間間隔了5秒,小於配置的10秒,那麼第二個定時任務會在第25s,也就是第乙個定時任務結束的當時就開始執行。

如果第乙個任務0秒開始執行,執行到第35秒結束,第二個定時任務應該20s開始執行,但拖到了35秒,與執行時間間隔了15秒,大於配置的10秒,那麼20s開始執行的任務會放棄,而按照配置中的下次執行時間也就是第40s開始執行。

這個引數在quartz中的配置是這樣的:

org.quartz.jobstore.misfirethreshold: 60000

在spring中的配置是這樣的:(試了一下沒有成功,還是按照60秒放棄任務,原因未知)

10000

另外,對於因為序列而錯過執行時間的任務,quartz有多種策略,比如:

withmisfirehandlinginstructiondonothing:不立即觸發,等下次執行時間執行

withmisfirehandlinginstructionfireandproceed:立即觸發執行

還有很多其他規則奇葩看起來十分眼暈的策略,沒深入研究。

關於Tomcat設定log為logback的配置

1 替換bin目錄下的tomcat juli.jar 2 為執行時新增引數 djuli logback.configurationfile 3 配置conf logback.xml檔案及conf logback acces.xml檔案 4 修改conf server.xml中的value節點 通常在...

關於JTAG引腳設定為普通IO口

stm32微控制器中的jtdo與jntrst是jtag引腳復用,一般最好不用jtag dp除錯埠,而是用sw dp,只需要jtms swdio與jtck swclk。這樣可以省下有限的io資源。但是stm32復位後,jtag與sw預設同時開啟的,即所有的jtag埠均被系統保留,軟體設定gpio是不起...

關於select設定動態值(自定義)為選中項

實際上這個標題是個偽標題,因為要使select框選中某個值,此值必須得是select內的某個option。即如果出現這種情況,需要使select框選中自定義的某個值,直接給select賦值,select id val something 是不可行的。故我們可以換種思路,先新增自定選項,然後再使sel...