iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot如何动态修改Scheduled
  • 532
分享到

SpringBoot如何动态修改Scheduled

2023-07-06 13:07:24 532人浏览 薄情痞子
摘要

这篇文章主要介绍“SpringBoot如何动态修改Scheduled”,在日常操作中,相信很多人在springBoot如何动态修改Scheduled问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringB

这篇文章主要介绍“SpringBoot如何动态修改Scheduled”,在日常操作中,相信很多人在springBoot如何动态修改Scheduled问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot如何动态修改Scheduled”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

SpringBoot 动态修改Scheduled

场景:

可配置的 Scheduled 执行时间,正常的 Scheduled 是在项目启动的时候固定死的,没办法根据调用后台代码自动更新 Scheduled 执行时间

例如:

系统启动 读取时间 Cron : 0 0 3 * * ? ,通过执行后台方法 可以动态配置 Cron 时间格式,并且清楚掉原本执行任务,执行新的设置定时任务时间

根据 ThreadPoolTaskScheduler 、ScheduledFuture 类 动态修改定时任务(ThreadPoolTaskScheduler 这个类 不能使用@Autowired ,直接定义成员变量 )

private ThreadPoolTaskScheduler threadPoolTaskScheduler;private ScheduledFuture<?> future;

动态修改 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 设置定时

@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 * * * *

定时类:

@Componentpublic 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@EnableSchedulingpublic 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”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: SpringBoot如何动态修改Scheduled

本文链接: https://www.lsjlt.com/news/358209.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作