国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot如何動(dòng)態(tài)修改Scheduled(系統(tǒng)啟動(dòng)默認(rèn)執(zhí)行,動(dòng)態(tài)修改)

瀏覽:4日期:2023-02-27 08:01:52
SpringBoot 動(dòng)態(tài)修改Scheduled場(chǎng)景:

可配置的 Scheduled 執(zhí)行時(shí)間,正常的 Scheduled 是在項(xiàng)目啟動(dòng)的時(shí)候固定死的,沒辦法根據(jù)調(diào)用后臺(tái)代碼自動(dòng)更新 Scheduled 執(zhí)行時(shí)間

例如:

系統(tǒng)啟動(dòng) 讀取時(shí)間 Cron : 0 0 3 * * ? ,通過執(zhí)行后臺(tái)方法 可以動(dòng)態(tài)配置 Cron 時(shí)間格式,并且清楚掉原本執(zhí)行任務(wù),執(zhí)行新的設(shè)置定時(shí)任務(wù)時(shí)間

1、根據(jù) ThreadPoolTaskScheduler 、ScheduledFuture 類 動(dòng)態(tài)修改定時(shí)任務(wù)(ThreadPoolTaskScheduler 這個(gè)類 不能使用@Autowired ,直接定義成員變量 )

private ThreadPoolTaskScheduler threadPoolTaskScheduler;private ScheduledFuture<?> future;

2、動(dòng)態(tài)修改 Scheduled 后臺(tái)方法邏輯(object 是 Runnable 實(shí)現(xiàn)類 需要執(zhí)行的定時(shí)邏輯,放到run 線程方法內(nèi))

threadPoolTaskScheduler = new ThreadPoolTaskScheduler();threadPoolTaskScheduler.initialize();if(future!=null){ future.cancel(true);}future=threadPoolTaskScheduler.schedule(object,new CronTrigger('需要Cron時(shí)間格式字符串') );

以上邏輯 ----------------------- 就可以實(shí)現(xiàn) 動(dòng)態(tài) Scheduled 配置

以下邏輯 ----------------------- 配置項(xiàng)目啟動(dòng) 自動(dòng)讀取 DB Cron 設(shè)置定時(shí)

1、@Order 并實(shí)現(xiàn) CommandLineRunner 類 重寫方法 run

@Override public void run(String... args) throws Exception {logger.info('系統(tǒng)啟動(dòng) 默認(rèn)設(shè)置對(duì)賬任務(wù) 時(shí)間');//獲取目前DB 設(shè)置的對(duì)賬時(shí)間GetBillTimeResp time = systemConfigService.getTime();//獲取Cron時(shí)間格式字符串String timeCron = billTimeCronFormat(time.getBillTime());logger.info('時(shí)間為:'+timeCron);//Scheduler 設(shè)置每天執(zhí)行。。。threadPoolTaskScheduler = new ThreadPoolTaskScheduler();threadPoolTaskScheduler.initialize();future=threadPoolTaskScheduler.schedule(object,new CronTrigger('DB Cron時(shí)間格式字符串')); }SpringBoot項(xiàng)目@Scheduled讀取動(dòng)態(tài)參數(shù)1、基于@Scheduled可配置開發(fā)

application.propertites: read.timer.parmas=0 0/1 * * * *

定時(shí)類:

@Componentpublic class ScheduledService {Logger logger= LoggerFactory.getLogger(ScheduledService.class); @Scheduled(cron = '${read.timer.parmas}') public void readConfigTable(){logger.info('*****.read.timer.parmas'); }}

啟動(dòng)類:

@SpringBootApplication@EnableScheduling //必須public class DataApplication { public static void main(String[] args) {SpringApplication.run(DataApplication.class,args); }}2、基于代碼實(shí)現(xiàn)

(1)核心代碼

@Component@EnableSchedulingpublic class TestScheduledParams implements SchedulingConfigurer{ Logger logger= LoggerFactory.getLogger(TestScheduledParams.class); public static String DEFAULT_CORN='0/3 * * * * *'; //##動(dòng)態(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('定時(shí)任務(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)其他類或方法動(dòng)態(tài)傳參賦值

TestScheduledParams.corn='0/20 * * * * *'

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
主站蜘蛛池模板: 谢通门县| 丰原市| 永吉县| 霍州市| 阜南县| 德安县| 军事| 镇安县| 华宁县| 安达市| 晴隆县| 和静县| 开江县| 思南县| 环江| 沧源| 宁强县| 平利县| 运城市| 台江县| 五原县| 比如县| 锦屏县| 子长县| 喀喇| 平泉县| 鹤岗市| 湘乡市| 新密市| 墨脱县| 太和县| 平遥县| 宾川县| 宜春市| 广德县| 邵武市| 高清| 宣汉县| 清水河县| 肇庆市| 肃宁县|