Spring Boot 動態修改 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時間格式字符串")); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM