本篇内容主要讲解"跳脚项目中怎么使用@已安排读取动态参数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"跳脚项目中怎么使用@已安排读取动态参数"吧!
使用@Scheduled读取动态参数
1、基于@Scheduled可配置开发
应用程序。属性:
read.timer.parmas=00/1****定时类:
@组件
publicclassScheduledService{
记录器记录器=记录器工厂。getlogger(计划服务。类);
@ Scheduled(cron=' $ { read。计时器。帕尔马斯} ')
publicatavitreadconfigtable(){ 0
伐木工。信息(' * * * * *。阅读。计时器。帕尔马斯';
}
}启动类:
@回弹应用
@EnableScheduling//必须
publicclassDataApplication{
publicationstativitmain(String[]args){ 0
spring APPLication。运行(数据应用程序。类,args);
}
}
2、基于代码实现
(1)核心代码
@组件
@EnableScheduling
公共类testscheduledparamsimplementscheduling configurer {
记录器记录器=记录器工厂。getlogger(testscheduledparams。类);
publicationstatistingdefault _ COON=' 0/3 * * * * * ';
//##动态传参要给默认值。
publicationstatisticstringcorn=DEFAULT _ COON;
@覆盖
public void configuretasks(scheduledtasksregistrator ){ 0
任务注册者。addtriggertask(NewRunnable(){ 0
@覆盖
公共void run(){ 0
//
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;
}
}
到此,相信大家对“SpringBoot项目中怎么使用@Scheduled读取动态参数”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/61863.html
