SpringBoot项目中使用@Scheduled读取动态参数
目录
- 使用@Scheduled读取动态参数
- 1、基于@Scheduled可配置开发
- 2、基于代码实现
- spring boot Scheduled动态配置
使用@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 staticString DEFAULT_CORN="0/3 * * * * *"; //##动态传参要给默认值。public static String corn=DEFAULT_CORN; @Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(new Runnable() {@Overridepublic void run() {// logger.info("定时任务逻辑"); }}, new Trigger() {@Overridepublic Date nextExecutionTime(TriggerContext triggerContext) {//任务触发,可修改任务的执行周期CronTrigger cronTrigger = new CronTrigger(corn); Date date = cronTrigger.nextExecutionTime(triggerContext); return date; }}); }}
(2)其他类或方法动态传参赋值
TestScheduledParams.corn="0/20 * * * * *"
spring boot Scheduled动态配置
package cn.com.suntree.cmp.service; import cn.com.suntree.cmp.utils.CommonUtil; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.Trigger; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; import java.util.Date; @Component@Log4j2public class MyDynamicTask implements SchedulingConfigurer {//实现SchedulingConfigurer 接口@AutowiredCommonUtil commonUtil; @AutowiredTaskService taskService; private static String cron; @Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {//重写该方法scheduledTaskRegistrar.addTriggerTask(doTask(), getTrigger()); }private Runnable doTask() {return new Runnable() {@Overridepublic void run() {log.info("-------------------------------执行"+cron); taskService.monDay(); //真正需要运行的逻辑代码}}; }private Trigger getTrigger() {return new Trigger() {@Overridepublic Date nextExecutionTime(TriggerContext triggerContext) {// 触发器CronTrigger trigger = new CronTrigger(getCron()); return trigger.nextExecutionTime(triggerContext); }}; }public String getCron() {Jedis jedis = commonUtil.getJedis(); String newCron =jedis.get("cron"); //可以改成配置到数据库中if (StringUtils.isEmpty(newCron)) {jedis.set("cron","0 30 0 ? * Mon"); return "0 30 0 ? * Mon"; }if (!newCron.equals(cron)) {log.info(new StringBuffer("Cron has been changed to:'").append(newCron).append("'. Old cron was:'").append(cron).append("'").toString()); cron = newCron; }return cron; }}
【SpringBoot项目中使用@Scheduled读取动态参数】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 赢在人生六项精进二阶Day3复盘
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 六项精进20180530
- 2020-12(完成事项)
- 17|17 关山松 第二课作业#公众号项目# D20
- RxJava|RxJava 在Android项目中的使用(一)
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- 靠QQ月入上万灰色暴利偏门的项目