您好,欢迎来到微智科技网。
搜索
您的当前位置:首页SpringBoot项目中使用@Scheduled读取动态参数

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

来源:微智科技网
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}\") 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

@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\ 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; }}

以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务