SpringBoot項(xiàng)目中使用@Scheduled讀取動(dòng)態(tài)參數(shù)
使用@Scheduled讀取動(dòng)態(tài)參數(shù)
1、基于@Scheduled可配置開發(fā)
application.propertites: read.timer.parmas=0 0/1 * * * *
定時(shí)類:
@Component
public class ScheduledService {
Logger logger= LoggerFactory.getLogger(ScheduledService.class);
@Scheduled(cron = "${read.timer.parmas}")
public void readConfigTable(){
logger.info("*****.read.timer.parmas");
}
}
啟動(dòng)類:
@SpringBootApplication
@EnableScheduling //必須
public class DataApplication {
public static void main(String[] args) {
SpringApplication.run(DataApplication.class,args);
}
}
2、基于代碼實(shí)現(xiàn)
(1)核心代碼
@Component
@EnableScheduling
public class TestScheduledParams implements SchedulingConfigurer{
Logger logger= LoggerFactory.getLogger(TestScheduledParams.class);
public static String DEFAULT_CORN="0/3 * * * * *";
//##動(dòng)態(tài)傳參要給默認(rèn)值。
public static String corn=DEFAULT_CORN;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
// logger.info("定時(shí)任務(wù)邏輯");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
//任務(wù)觸發(fā),可修改任務(wù)的執(zhí)行周期
CronTrigger cronTrigger = new CronTrigger(corn);
Date date = cronTrigger.nextExecutionTime(triggerContext);
return date;
}
});
}
}
(2)其他類或方法動(dòng)態(tài)傳參賦值
TestScheduledParams.corn="0/20 * * * * *"
spring boot Scheduled動(dòng)態(tài)配置
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 {//實(shí)現(xiàn)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("-------------------------------執(zhí)行"+cron);
taskService.monDay();//真正需要運(yùn)行的邏輯代碼
}
};
}
private Trigger getTrigger() {
return new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 觸發(fā)器
CronTrigger trigger = new CronTrigger(getCron());
return trigger.nextExecutionTime(triggerContext);
}
};
}
public String getCron() {
Jedis jedis = commonUtil.getJedis();
String newCron = jedis.get("cron");//可以改成配置到數(shù)據(jù)庫(kù)中
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;
}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)現(xiàn)Mysql使用MD5進(jìn)行密碼加密的示例
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)Mysql使用MD5進(jìn)行密碼加密的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
關(guān)于mybatis調(diào)用存儲(chǔ)過程獲取返回值問題
這篇文章主要介紹了mybatis調(diào)用存儲(chǔ)過程獲取返回值問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明)
這篇文章主要介紹了解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
idea中創(chuàng)建maven的Javaweb工程并進(jìn)行配置(圖文教程)
這篇文章主要介紹了idea中創(chuàng)建maven的Javaweb工程并進(jìn)行配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),文中給大家提到了tomcat的運(yùn)行方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
SpringCloud GateWay動(dòng)態(tài)路由用法
網(wǎng)關(guān)作為所有項(xiàng)目的入口,不希望重啟,因此動(dòng)態(tài)路由是必須的,動(dòng)態(tài)路由主要通過RouteDefinitionRepository接口實(shí)現(xiàn),其默認(rèn)的實(shí)現(xiàn)是InMemoryRouteDefinitionRepository,即在內(nèi)存中存儲(chǔ)路由配置,可基于這個(gè)map對(duì)象操作,動(dòng)態(tài)路由的實(shí)現(xiàn)方案有兩種2024-10-10
SpringBoot集成ENC對(duì)配置文件進(jìn)行加密的流程步驟
Spring Boot Encoder,即Spring Boot加密模塊,它提供了一種簡(jiǎn)單的方式來集成安全編碼功能到Spring Boot應(yīng)用程序中,它是Spring Security框架的一部分,旨在幫助開發(fā)者輕松地處理數(shù)據(jù)加密,本文給大家介紹了SpringBoot集成ENC對(duì)配置文件進(jìn)行加密的流程步驟2024-12-12
Java實(shí)現(xiàn)藍(lán)橋杯數(shù)獨(dú)游戲的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)藍(lán)橋杯數(shù)獨(dú)游戲的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

