zoukankan      html  css  js  c++  java
  • 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时间格式字符串")); }
  • 相关阅读:
    获取资源文件 r.drawable中的图片转换为drawable、bitmap
    Android 启动白屏或者黑屏闪现解决
    Android应用截图方法
    史上最全的变量、作用域和内存问题
    RunLoop总结:RunLoop的应用场景(四)
    poj3436 ACM Computer Factory, 最大流,输出路径
    android开发——从相冊中选择图片不裁剪
    <html>
    poj3073
    poj 2482 Stars in Your Window (线段树扫描线)
  • 原文地址:https://www.cnblogs.com/yi1036943655/p/11511676.html
Copyright © 2011-2022 走看看