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...