1. 程式人生 > >springboot Quartz動態修改cron表示式

springboot Quartz動態修改cron表示式

1、概述: 在開發中有的時候需要去手動禁止和啟用定時任務,修改定時任務的cron表示式然後再讓其動態生效,之前有過SSM的類似的業務的開發但是忘記寫下來了。。。只好重新溫習了一次,加上最近比較流行springBoot所以升級了一下用springBoot來完成.

2、關聯技術 SpringBoot、Quartz、H2、thymeleaf (好像就這麼多)

3、具體流程 

        1)首先去手動建立一個排程器工廠物件-SchedulerFactoryBean;其實應該不用手動建立的但是為了顧及到業務的複雜性所以還是建立一個好用。

  @Bean
    public SchedulerFactoryBean schedulerFactory(){
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        /*用於Quartz叢集,啟動時更新已存在的Job*/
        factoryBean.setOverwriteExistingJobs(true);
        /*定時任務開始啟動後延遲5秒開始*/
        factoryBean.setStartupDelay(5);
        return factoryBean;
    }

         2)獲取到排程器-Scheduler

    //得到排程器
        Scheduler scheduler = schedulerFactoryBean.getScheduler();

         3)判斷是否有觸發器-trigger存在其中,因為有可能說上次的觸發器 並沒有刪除

    //獲得觸發器
        TriggerKey triggerKey = TriggerKey.triggerKey(config.getName(), config.getGroup());
        CronTrigger trigger = (CronTrigger)scheduler.getTrigger(triggerKey);

         4)建立一個任務類需要繼承Job,實現方法execute。需要在其中執行定時任務如下:

//註釋作用,當上一個任務未結束時下一個任務需進行等待
@DisallowConcurrentExecution
public class QuartzJobFactory implements Job {
    public static final   String SCHEDULEJOBKEY="scheduleJob";
    //execute會根據cron的規則進行執行
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Config config = (Config) jobExecutionContext.getMergedJobDataMap().get(SCHEDULEJOBKEY);
        TaskUtils.invokMethod(config);
    }
}

         5)將執行例項新增到任務當中去,我在例子是將執行任務的資訊封裝到了物件config當中然後在任務QuartzJobFactoryz中進行解讀的 

public static void invokMethod(Config config){
        Object obj=null;
        Class clazz=null;
        //通過Spring上下文去找 也有可能找不到
        try {
            obj= SpringUtils.getBean(config.getClassPath().split("\\.")[config.getClassPath().split("\\.").length - 1]);
            if (obj == null){
                clazz = Class.forName(config.getClassPath());
                obj = clazz.newInstance();
            }else{
                clazz =obj.getClass();
            }
        }catch (Exception e){
            throw  new RuntimeException("ERROR:TaskUtils is Bean Create please check the classpath is`t right or not");
        }
        Method method=null;
        //獲得方法名
        try {
            method = clazz.getDeclaredMethod(config.getMethodName());
        } catch (NoSuchMethodException e) {
            throw  new RuntimeException("ERROR:TaskUtils is Bean the method Create please check the methodName is`t right or not");
        }
        //方法執行
        try {
            method.invoke(obj);
        } catch (Exception e) {
            throw  new RuntimeException("ERROR:TaskUtils is Bean the method execute please check the methodName is`t right or not");
        }

    }

        6)建立觸發器並且繫結cron表示式

              //將cron表示式進行轉換
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(config.getCron());
            //建立觸發器並將cron表示式物件給塞入
            trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
            //在排程器中將觸發器和任務進行組合
            scheduler.scheduleJob(jobDetail,trigger);

可憐希望大佬們儘量選擇csdn下載的,(原本想1分的但是最低都是2分)

相關推薦

springboot Quartz動態修改cron表示式

1、概述: 在開發中有的時候需要去手動禁止和啟用定時任務,修改定時任務的cron表示式然後再讓其動態生效,之前有過SSM的類似的業務的開發但是忘記寫下來了。。。只好重新溫習了一次,加上最近比較流行springBoot所以升級了一下用springBoot來完成.2、關聯技術 S

SpringBoot定時任務動態修改cron表示式改變執行週期

   一、場景引入        前不久做過一個根據下載指令定時下載檔案到伺服器的需求。輪詢下載的週期需要根據下載任務量的大小動態修改,下載任務密集的時候就週期縮小,下載任務少量時就擴大週期時間。java本身和第三方開源框架Spring共

SpringBoot 定時任務 @Scheduled cron表示式

  1.首先要用springBoot的定時類要在springBoot的啟動類上新增 @EnableScheduling註解 ** * * @Author: ruanyanghui * @Company: bibll * @Email: [email pro

Atitit spring 定時器 CRON表示式 含義 目錄 1.1. 大概流程 1 1.2. 核心原始碼springboot 1 1.3. Cron表示式屬性——String 2 1.4

Atitit spring 定時器 CRON表示式    含義      目錄 1.1. 大概流程 1 1.2. 核心原始碼springboot 1 1.3. Cron表示式屬性——String 2 1.4. cron表示

quartz定時任務cron表示式語法

關於線上生成器,感覺有些不好用,所以還是需要自己瞭解語法的 一般的我們只需要六位,也就是不管年那麼剩下的就是(秒 分 時 日 周 月),然後確定自己到底需要以什麼為單位比如是我們需要多少分鐘執行一次,那麼我們只需要修改分鐘,而右邊的東西用*和?代替,左邊的就不能這樣了,預設是0 如下:0 0/30 * *

SpringCloud之java定時器quartz定時任務cron表示式

quartz定時任務cron表示式例子: 0 * * * * ? 每1分鐘觸發一次 0 0 * * * ? 每天每1小時觸發一次 0 0 10 * * ? 每天10點觸發一次 0 * 14 * * ?

quartz定時任務cron表示式詳解

cron表示式用於配置cronTrigger的例項。cron表示式實際上是由七個子表示式組成。這些表示式之間用空格分隔。 1.Seconds (秒)2.Minutes(分)3.Hours(小時)4.Day-of-Month  (天)5.Month(月)6.Day-of-Week (周)7.Year(年) 例:

springboot 中定時任務cron表示式

一個cron表示式有至少6個(也可能7個)有空格分隔的時間元素。按順序依次為 秒(0~59) 分鐘(0~59) 小時(0~23) 天(月)(0~31,但是你需要考慮你月的天數) 月(0~11) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,

quartz 定時器cron表示式全解析

一個cron表示式有至少6個(也可能7個)有空格分隔的時間元素。按順序依次為1.秒(0~59)2.分鐘(0~59)3.小時(0~23)4.天(月)(0~31,但是你需要考慮你月的天數)5.月(0~11)6.天(星期)(1~7 1=SUN (Java 環境裡1表示

Spring @Scheduled定時任務動態修改cron引數

  Spring框架自3.0版本起,自帶了任務排程功能,好比是一個輕量級的Quartz,而且使用起來也方便、簡單,且不需要依賴其他的JAR包。秉承著Spring的一貫風格,Spring任務排程的實現同時支援註解配置和XML配置兩種方式。   再來談談變態的專案需求:我們正在做一個智慧數字電錶的資料採集專案,

動態改變Cron表示式,來實現動態執行Spring定時任務

 spring定時器非常強大,但是有時候我們需要在不需要重啟應用就可以動態的改變Cron表示式的值。這樣我們可以在配置檔案中寫一個表示式的值。每次想改變表示式的值的時候手動修改配置檔案中的表示式,實現動態表示式。但是我們也可以從資料庫中動態讀取,都是一樣的。 一:首先定

quartz.net 根據cron表示式計算最近幾次的執行時間

網上查了很久,沒找到.net版本的,java的有些,後來自己看了下api,發現實現起來很簡單,程式碼再傳共享下 /// <summary> /// Corn表示式的執行時間

C#使用Quartz.NET中Cron表示式

2015-07-09 00:59 by jiangys, 46978 閱讀, 84 評論, 收藏, 編輯 概述 Quartz.NET是一個開源的作業排程框架,非常適合在平時的工作中,定時輪詢資料庫同步,定時郵件通知,定時處理資料等。 Quartz.NET允許開發人員

2. Spring Boot 定時任務升級篇(動態修改cron引數)

【文章出自:http://412887952-qq-com.iteye.com/blog/2367537】   需求緣起:在釋出了《Spring Boot定時任務升級篇》之後得到不少反饋,其中有一個反饋就是如何動態修改cron引數呢?那麼我們一起看看具體怎麼實現,先看下

任務調度開源框架Quartz動態添加、修改和刪除定時任務

star play cit box sport nts str ignorecas tar 作者:Joyce-Luo Quartz 是個開源的作業調度框架,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。Quartz框架包含了調度器監聽、

SpringBoot系列十一:SpringBoot整合Restful架構(使用 RestTemplate 模版實現 Rest 服務調用、Swagger 集成、動態修改日誌級別)

attribute tar ring 動態修改 包含 分布式 restfu pen 負載 1、概念:SpringBoot整合Restful架構 2、背景 Spring 與 Restful 整合才是微架構的核心,雖然在整個 SpringBoot(SpringCloud)之中提

springboot+ssm+mysql 讀寫分離+動態修改資料來源

一.我們最開始先實現讀寫分離(其實和多資料來源差不多,只是多資料來源的定義更加廣泛,讀寫分離只是其中的一個應用而已) 這裡就不怎麼探討mysql的主從的一個原理了,我直接貼出一個部落格,可以去看看,大致瞭解一下mysql主從。 我學東西喜歡先跑一次,如果成功了,我就再深入研究了,其實大體的邏

PHP通過正則表示式動態修改配置檔案

一、相關的知識點 正表示式 preg_match_all – 進行全域性正則表示式匹配 preg_replace – 執行正則表示式的搜尋和替換 檔案的讀和寫 file_get_contents()–檔案讀取資訊函式 file_put_con

Quartz定時任務框架(三)SimpleTrigger和CronTrigger、最詳細的Cron表示式範例

Quartz的主要介面類是Schedule、Job、Trigger,而觸發器Trigger就是定時任務的觸發時間,它規定安排了關聯的任務會在什麼時候執行,並且表明了再次執行的時機。 目錄 Trigger StartTime & EndTime 優先順序(Priority)

quartzcron表示式

cron是unix系統中的crontab底層任務排程所用的一種表達方式。cron在quartz和spring task等排程框架、工具中都會使用到。   cron表示式中共包含7個欄位(引數),分別表示秒、分、時、日、月、周、年,其中年是可選欄位。