您好,登錄后才能下訂單哦!
這篇文章主要介紹“SpringBoot如何動態修改Scheduled”,在日常操作中,相信很多人在SpringBoot如何動態修改Scheduled問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringBoot如何動態修改Scheduled”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
可配置的 Scheduled 執行時間,正常的 Scheduled 是在項目啟動的時候固定死的,沒辦法根據調用后臺代碼自動更新 Scheduled 執行時間
系統啟動 讀取時間 Cron : 0 0 3 * * ? ,通過執行后臺方法 可以動態配置 Cron 時間格式,并且清楚掉原本執行任務,執行新的設置定時任務時間
1、根據 ThreadPoolTaskScheduler 、ScheduledFuture 類 動態修改定時任務(ThreadPoolTaskScheduler 這個類 不能使用@Autowired ,直接定義成員變量 )
private ThreadPoolTaskScheduler threadPoolTaskScheduler; private ScheduledFuture<?> future;
2、動態修改 Scheduled 后臺方法邏輯(object 是 Runnable 實現類 需要執行的定時邏輯,放到run 線程方法內)
threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.initialize(); if(future!=null){ future.cancel(true); } future=threadPoolTaskScheduler.schedule(object,new CronTrigger("需要Cron時間格式字符串") );
以上邏輯 ----------------------- 就可以實現 動態 Scheduled 配置
以下邏輯 ----------------------- 配置項目啟動 自動讀取 DB Cron 設置定時
1、@Order 并實現 CommandLineRunner 類 重寫方法 run
@Override public void run(String... args) throws Exception { logger.info("系統啟動 默認設置對賬任務 時間"); //獲取目前DB 設置的對賬時間 GetBillTimeResp time = systemConfigService.getTime(); //獲取Cron時間格式字符串 String timeCron = billTimeCronFormat(time.getBillTime()); logger.info("時間為:"+timeCron); //Scheduler 設置每天執行。。。 threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.initialize(); future=threadPoolTaskScheduler.schedule(object,new CronTrigger("DB Cron時間格式字符串")); }
application.propertites: read.timer.parmas=0 0/1 * * * *
定時類:
@Component public class ScheduledService { Logger logger= LoggerFactory.getLogger(ScheduledService.class); @Scheduled(cron = "${read.timer.parmas}") public void readConfigTable(){ logger.info("*****.read.timer.parmas"); } }
啟動類:
@SpringBootApplication @EnableScheduling //必須 public class DataApplication { public static void main(String[] args) { SpringApplication.run(DataApplication.class,args); } }
(1)核心代碼
@Component @EnableScheduling public class TestScheduledParams implements SchedulingConfigurer{ Logger logger= LoggerFactory.getLogger(TestScheduledParams.class); public static String DEFAULT_CORN="0/3 * * * * *"; //##動態傳參要給默認值。 public static String corn=DEFAULT_CORN; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask(new Runnable() { @Override public void run() { // logger.info("定時任務邏輯"); } }, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) { //任務觸發,可修改任務的執行周期 CronTrigger cronTrigger = new CronTrigger(corn); Date date = cronTrigger.nextExecutionTime(triggerContext); return date; } }); } }
(2)其他類或方法動態傳參賦值
TestScheduledParams.corn="0/20 * * * * *"
到此,關于“SpringBoot如何動態修改Scheduled”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。