溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot項目中怎么使用@Scheduled讀取動態參數

發布時間:2021-11-01 11:47:19 來源:億速云 閱讀:852 作者:iii 欄目:開發技術

本篇內容主要講解“SpringBoot項目中怎么使用@Scheduled讀取動態參數”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SpringBoot項目中怎么使用@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","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讀取動態參數”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女