2015-07-13 66 views
1

我看到了github中的示例動態觸發器,它使用固定速率/延遲,但它可以實現動態觸發器與cron表達式,其中一旦工作完成與自定義退出代碼,我們希望cron表達方式,使其不再輪詢當天或改變cron expressin從不同時間開始輪詢。春季集成動態觸發器與cron表達式

回答

0

不幸的是org.springframework.scheduling.support.CronTrigger使用final字段,所以我們不能在運行時改變它的狀態。因此,任何想法尋求如何改變價值的方式都是浪費時間。

從其他讓我們來看看這只是一個time producer解決方案來通知調度程序何時開始提供的任務。

換句話說這裏是一個Trigger合約代碼:

public interface Trigger { 

    Date nextExecutionTime(TriggerContext triggerContext); 

} 

那麼,我們的解決方案必須提供的僅僅只有返回特定Date每個nextExecutionTime調用。

只有你需要在這裏做的是dynamic trigger實施,它符合你的要求。

正確的,這可能會有點難以達到的cron相似的行爲,但對你沒有選擇現在...

雖然可以stop()你的任務後適配器,注入新的CronTrigger到它和start()它再次。

+0

但是,如果您停止使用控制總線的adapater,它將如何啓動第二天而不通過其他一些應用程序調用。我們所需要的是,讓第一天,如果工作成功完成,然後使用動態觸發器更改下一個計劃時間,以這種方式進入第二天。所以我相信擴展DynamicTrigger是正確的方法,只是重寫nextscheduledTime方法。 – user509755

0

您可以編寫一個自定義觸發器,該觸發器可簡單包裝CronTrigger,您可以隨意替換代理CronTrigger

但是,Trigger機制的限制是您無法更改現有計劃。

如果您正在輪詢線程上運行您的工作,那麼您可以在輪詢線程返回之前更改觸發器(並調用觸發器以查找下一個執行時間)。

彈簧整合4.2(目前在里程碑2)有conditional pollers這將使這樣的事情更容易一些。