SpringBoot项目中使用@Scheduled读取动态参数

网友投稿 340 2022-11-26

SpringBoot项目中使用@Scheduled读取动态参数

目录使用@Scheduled读取动态参数1、基于@Scheduled可配置开发2、基于代码实现spring boot Scheduled动态配置

使用@Scheduled读取动态参数

1、基于@Scheduled可配置开发

application.propertites:

read.timer.parmas=0 0/1 * * * *

定时类:

@Component

public class ScheduledService {

Logger logger= LoggerFactory.getLogger(ScheduledService.class);

@Scheduled(cron = "${read.timer.parmas}")

publiMUxxfic 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

@EnableScheduling

public 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 * * * * *"

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

@Log4j2

public class MyDynamicTask implements SchedulingConfigurer {//实现SchedulingConfigurer 接口

@Autowired

CommonUtil commonUtil;

@Autowired

TaskService taskService;

private static String cron;

@Override

public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {//重写该方法

scheduledTaskRegistrar.addTriggerTask(doTask(), getTrigger());

}

private Runnable doTask() {

return new Runnable() {

@Override

public void run() {

log.info("-------------------------------执行"+cron);

taskService.monDay();//真正需要运行的逻辑代码

}

};

}

private Trigger getTrigger() {

return new Trigger() {

@Override

public 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;

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Hadoop 企业优化
下一篇:Hadoop 之 Yarn
相关文章

 发表评论

暂时没有评论,来抢沙发吧~