SpringBoot怎么动态修改Scheduled
SpringBoot怎么动态修改Scheduled
本篇内容主要讲解“SpringBoot怎么动态修改Scheduled”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么动态修改Scheduled”吧!
SpringBoot 动态修改Scheduled
场景:
可配置的 Scheduled 执行时间,正常的 Scheduled 是在项目启动的时候固定死的,没办法根据调用后台代码自动更新 Scheduled 执行时间
例如:
系统启动 读取时间 Cron : 0 0 3 * * ? ,通过执行后台方法 可以动态配置 Cron 时间格式,并且清楚掉原本执行任务,执行新的设置定时任务时间
1、根据 ThreadPoolTaskScheduler 、ScheduledFuture 类 动态修改定时任务(ThreadPoolTaskScheduler 这个类 不能使用@Autowired ,直接定义成员变量 )
privateThreadPoolTaskSchedulerthreadPoolTaskScheduler;privateScheduledFuture<?>future;
2、动态修改 Scheduled 后台方法逻辑(object 是 Runnable 实现类 需要执行的定时逻辑,放到run 线程方法内)
threadPoolTaskScheduler=newThreadPoolTaskScheduler();threadPoolTaskScheduler.initialize();if(future!=null){future.cancel(true);}future=threadPoolTaskScheduler.schedule(object,newCronTrigger("需要Cron时间格式字符串"));
以上逻辑 ----------------------- 就可以实现 动态 Scheduled 配置
以下逻辑 ----------------------- 配置项目启动 自动读取 DB Cron 设置定时
1、@Order 并实现 CommandLineRunner 类 重写方法 run
@Overridepublicvoidrun(String...args)throwsException{logger.info("系统启动默认设置对账任务时间");//获取目前DB设置的对账时间GetBillTimeResptime=systemConfigService.getTime();//获取Cron时间格式字符串StringtimeCron=billTimeCronFormat(time.getBillTime());logger.info("时间为:"+timeCron);//Scheduler设置每天执行。。。threadPoolTaskScheduler=newThreadPoolTaskScheduler();threadPoolTaskScheduler.initialize();future=threadPoolTaskScheduler.schedule(object,newCronTrigger("DBCron时间格式字符串"));}
SpringBoot项目@Scheduled读取动态参数
1、基于@Scheduled可配置开发
application.propertites:read.timer.parmas=00/1****
定时类:
@ComponentpublicclassScheduledService{Loggerlogger=LoggerFactory.getLogger(ScheduledService.class);@Scheduled(cron="${read.timer.parmas}")publicvoidreadConfigTable(){logger.info("*****.read.timer.parmas");}}
启动类:
@SpringBootApplication@EnableScheduling//必须publicclassDataApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DataApplication.class,args);}}
2、基于代码实现
(1)核心代码
@Component@EnableSchedulingpublicclassTestScheduledParamsimplementsSchedulingConfigurer{Loggerlogger=LoggerFactory.getLogger(TestScheduledParams.class);publicstaticStringDEFAULT_CORN="0/3*****";//##动态传参要给默认值。publicstaticStringcorn=DEFAULT_CORN;@OverridepublicvoidconfigureTasks(ScheduledTaskRegistrartaskRegistrar){taskRegistrar.addTriggerTask(newRunnable(){@Overridepublicvoidrun(){//logger.info("定时任务逻辑");}},newTrigger(){@OverridepublicDatenextExecutionTime(TriggerContexttriggerContext){//任务触发,可修改任务的执行周期CronTriggercronTrigger=newCronTrigger(corn);Datedate=cronTrigger.nextExecutionTime(triggerContext);returndate;}});}}
(2)其他类或方法动态传参赋值
TestScheduledParams.corn="0/20*****"
到此,相信大家对“SpringBoot怎么动态修改Scheduled”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
vue动态添加删除输入框(springboot vue怎么让数据库显示出来)
springbootvue怎么让数据库显示出来?一般情况下是前端调阅后端接口,来获取到数据库的数据,后端哪里会把数据库的数据整理...
-
springboot实现基于aop的切面日志
本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下通过aop的切面方式实现日志...
-
SpringBoot定时任务功能怎么实现
-
SpringBoot中的@Import注解怎么使用
-
SpringBoot整合Lombok及常见问题怎么解决
-
springboot图片验证码功能模块怎么实现
-
Springboot+SpringSecurity怎么实现图片验证码登录
-
SpringBoot注解的知识点有哪些
SpringBoot注解的知识点有哪些这篇“SpringBoot注...
-
SpringBoot2.x中management.security.enabled=false无效怎么解决
-
springboot怎么禁用某项健康检查
springboot怎么禁用某项健康检查今天小编给大家分享一下sp...