本篇內(nèi)容主要講解“SpringBoot怎么動態(tài)修改Scheduled”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SpringBoot怎么動態(tài)修改Scheduled”吧!
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括定州網(wǎng)站建設(shè)、定州網(wǎng)站制作、定州網(wǎng)頁制作以及定州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,定州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到定州省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
可配置的 Scheduled 執(zhí)行時間,正常的 Scheduled 是在項目啟動的時候固定死的,沒辦法根據(jù)調(diào)用后臺代碼自動更新 Scheduled 執(zhí)行時間
系統(tǒng)啟動 讀取時間 Cron : 0 0 3 * * ? ,通過執(zhí)行后臺方法 可以動態(tài)配置 Cron 時間格式,并且清楚掉原本執(zhí)行任務(wù),執(zhí)行新的設(shè)置定時任務(wù)時間
1、根據(jù) ThreadPoolTaskScheduler 、ScheduledFuture 類 動態(tài)修改定時任務(wù)(ThreadPoolTaskScheduler 這個類 不能使用@Autowired ,直接定義成員變量 )
private ThreadPoolTaskScheduler threadPoolTaskScheduler; private ScheduledFuture> future;
2、動態(tài)修改 Scheduled 后臺方法邏輯(object 是 Runnable 實現(xiàn)類 需要執(zhí)行的定時邏輯,放到run 線程方法內(nèi))
threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.initialize(); if(future!=null){ future.cancel(true); } future=threadPoolTaskScheduler.schedule(object,new CronTrigger("需要Cron時間格式字符串") );
以上邏輯 ----------------------- 就可以實現(xiàn) 動態(tài) Scheduled 配置
以下邏輯 ----------------------- 配置項目啟動 自動讀取 DB Cron 設(shè)置定時
1、@Order 并實現(xiàn) CommandLineRunner 類 重寫方法 run
@Override public void run(String... args) throws Exception { logger.info("系統(tǒng)啟動 默認(rèn)設(shè)置對賬任務(wù) 時間"); //獲取目前DB 設(shè)置的對賬時間 GetBillTimeResp time = systemConfigService.getTime(); //獲取Cron時間格式字符串 String timeCron = billTimeCronFormat(time.getBillTime()); logger.info("時間為:"+timeCron); //Scheduler 設(shè)置每天執(zhí)行。。。 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 * * * * *"; //##動態(tài)傳參要給默認(rèn)值。 public static String corn=DEFAULT_CORN; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask(new Runnable() { @Override public void run() { // logger.info("定時任務(wù)邏輯"); } }, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) { //任務(wù)觸發(fā),可修改任務(wù)的執(zhí)行周期 CronTrigger cronTrigger = new CronTrigger(corn); Date date = cronTrigger.nextExecutionTime(triggerContext); return date; } }); } }
(2)其他類或方法動態(tài)傳參賦值
TestScheduledParams.corn="0/20 * * * * *"
到此,相信大家對“SpringBoot怎么動態(tài)修改Scheduled”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!