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时间格式字符串")); }

 

转载于:https://www.cnblogs.com/yi1036943655/p/11511676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值