構成可能なスケジュールされた実行時間、通常のスケジュールはプロジェクトの開始時に固定されます。バックグラウンド コード実行の呼び出しに基づいてスケジュールを自動的に更新する方法はありません。 time
システム起動読み取り時間 Cron: 0 0 3 * * ?、Cron 時間形式はバックグラウンド メソッドを実行することで動的に構成でき、元の実行タスクはクリアされ、新しい実行時間が実行可能になります スケジュールされたタスク時間の設定
##1. ThreadPoolTaskScheduler および ScheduledFuture クラスに従ってスケジュールされたタスクを動的に変更します (ThreadPoolTaskScheduler クラスは @Autowired を使用してメンバー変数を直接定義できません)private ThreadPoolTaskScheduler threadPoolTaskScheduler; private ScheduledFuture<?> future;2. スケジュールされたバックグラウンド メソッドのロジックを動的に変更します (オブジェクトは、Runnable 実装クラスが実行する必要があるタイミング ロジックであり、実行スレッド メソッドに配置されます)
threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.initialize(); if(future!=null){ future.cancel(true); } future=threadPoolTaskScheduler.schedule(object,new CronTrigger("需要Cron时间格式字符串") );
上記ロジック ------- -----動的な Scheduled 構成を実現できます
#次のロジック----- ------------------ 設定項目 DB Cronの自動読み込み開始、タイミング
1、@Orderの設定、CommandLineRunnerクラスのオーバーライドメソッド実行の実装@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でスケジュールを動的に変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。