91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何動態修改Scheduled

發布時間:2023-05-18 11:51:34 來源:億速云 閱讀:116 作者:zzz 欄目:編程語言

這篇文章主要介紹“SpringBoot如何動態修改Scheduled”,在日常操作中,相信很多人在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時間格式字符串")); }

SpringBoot項目@Scheduled讀取動態參數

1、基于@Scheduled可配置開發

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);
    }
}

2、基于代碼實現

(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”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

葫芦岛市| 商丘市| 清原| 嘉祥县| 兖州市| 无锡市| 淮南市| 柯坪县| 上犹县| 昌黎县| 太和县| 泸西县| 翼城县| 河池市| 垣曲县| 长泰县| 乐业县| 梧州市| 慈利县| 黑水县| 左贡县| 定结县| 凤庆县| 潞西市| 延长县| 长寿区| 桂阳县| 鄂尔多斯市| 崇文区| 平凉市| 开封市| 台安县| 泽库县| 昌邑市| 库车县| 鄢陵县| 安康市| 根河市| 布拖县| 德令哈市| 西平县|