0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何動態(tài)修改cron參數(shù)呢?

jf_78858299 ? 來源:SpringBoot ? 作者:林祥纖 ? 2023-04-12 11:04 ? 次閱讀

如何動態(tài)修改cron參數(shù)呢?那么我們一起看看具體怎么實現(xiàn),先看下本節(jié)大綱:

(1)簡單方式:修改定時任務(wù)的執(zhí)行周期;

(2)動態(tài)修改定時任務(wù)的執(zhí)行周期;

接下來看下本節(jié)的具體內(nèi)容:

(1)簡單方式:修改定時任務(wù)的執(zhí)行周期;

按正常來講,修改定時任務(wù)的執(zhí)行周期,把服務(wù)停下來,改下任務(wù)的cron參數(shù),再重啟服務(wù)就搞搞定了。這種方式很簡單,沒有可說的,但是有沒有一種可能,在不停服務(wù)的情況下,就可以動態(tài)的修改任務(wù)的cron參數(shù)呢?哈哈,那是必須的必。

(2)動態(tài)修改定時任務(wù)的執(zhí)行周期;

首先我們先會回顧下,我們之前是使用了@Scheduled(cron =“0/5 * * * * *”)這種方式適用于固定任務(wù)周期的任務(wù),若要修改任務(wù)執(zhí)行周期,只能走“停服務(wù)—修改任務(wù)執(zhí)行周期—重啟服務(wù)”這條路。那么如何動態(tài)修改呢,我們看下步驟:

① 在定時任務(wù)類上增加@EnabledScheduling注解,并實現(xiàn)SchedulingConfigurer接口。

② 設(shè)置一個靜態(tài)的cron,用于存放任務(wù)執(zhí)行周期參數(shù)。

③ 開啟一個線程,用于模擬實際業(yè)務(wù)中外部原因修改了任務(wù)執(zhí)行周期。

④ 設(shè)置任務(wù)觸發(fā)器,觸發(fā)任務(wù)執(zhí)行。

具體的代碼如下:

package com.kfit.task;

import java.util.Date;

import org.springframework.scheduling.Trigger;

import org.springframework.scheduling.TriggerContext;

importorg.springframework.scheduling.annotation.EnableScheduling;

importorg.springframework.scheduling.annotation.SchedulingConfigurer;

importorg.springframework.scheduling.config.ScheduledTaskRegistrar;

import org.springframework.scheduling.support.CronTrigger;

import org.springframework.stereotype.Component;

/**

  • Spring @Scheduled定時任務(wù)動態(tài)修改cron****參數(shù)
  • @author Angel --守護天使
  • @version v.0.1
  • @date 2017年4月6日

*/

@Component

@EnableScheduling

**public **class TaskCronChange implements SchedulingConfigurer{

**public ****static** String  *cron* ; 



**public** TaskCronChange() {

    //默認情況是:每5秒執(zhí)行一次.

    *cron* = "0/5 * * * * *";

    **new** Thread(**new** Runnable() {

      

       // 開啟新線程模擬外部更改了任務(wù)執(zhí)行周期.

       @Override

       **public ****void** run() {

          **try** {

              // 讓線程睡眠 15秒.

              Thread. *sleep* (15000);

          } **catch** (InterruptedException e) {

              e.printStackTrace();

          }

           //修改為:每10秒執(zhí)行一次.

          *cron* = "0/10 * ** * *";

           System. ***err*** .println("cron change to:"+ *cron* );

       }

   }).start();;

}

 

@Override

**public ****void** configureTasks(ScheduledTaskRegistrar taskRegistrar) {

   Runnable task = **new** Runnable() {

       @Override

       **public ****void** run() {

          //任務(wù)邏輯代碼部分.

          System. ***out*** .println("TaskCronChangetask is running ... "+ **new** Date());

       }

   };

   Trigger trigger = **new** Trigger() {

       @Override

       **public** Date nextExecutionTime(TriggerContext triggerContext) {

          //任務(wù)觸發(fā),可修改任務(wù)的執(zhí)行周期.

          CronTrigger trigger = **new** CronTrigger( *cron* );

          Date nextExec = trigger.nextExecutionTime(triggerContext);

          **return **nextExec;

       }

   };

   taskRegistrar.addTriggerTask(task, trigger);

}

}

這里核心的主要是使用到了ScheduledTaskRegistrar這個類有一個方法addTriggerTask(Runnable,Trigger) 兩個參數(shù),一個Runnable,一個是Trigger,在Runnable中執(zhí)行業(yè)務(wù)邏輯代碼,在Trigger修改定時任務(wù)的執(zhí)行周期。

啟動查看控制臺的打印信息如下:

TaskCronChange task is running ... Thu Apr 0605:38:20 CST 2017

TaskCronChangetask is running ... Thu Apr 06 05:38:25CST 2017

TaskCronChangetask is running ... Thu Apr 06 05:38:30CST 2017

cronchange to:0/10 * * * * *

TaskCronChangetask is running ... Thu Apr 06 05:38:35CST 2017

TaskCronChangetask is running ... Thu Apr 06 05:38:40CST 2017

TaskCronChangetask is running ... Thu Apr 06 05:38:50CST 2017

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2973

    瀏覽量

    104910
  • 服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    18519
收藏 人收藏

    評論

    相關(guān)推薦

    cron和crontab命令

    本帖最后由 windworld 于 2016-2-24 14:08 編輯 cron機制cron可以讓系統(tǒng)在指定的時間,去執(zhí)行某個指定的工作,我們可以使用crontab指令來管理cron機制
    發(fā)表于 02-24 13:33

    DM8168編碼器可以動態(tài)修改修改profile、level嗎?

    動態(tài)參數(shù)里面沒有,請問在理論上來說是可以修改的嗎? 是不是把對應(yīng)的channal先disable然后在M3 video中修改profile,這樣可以嗎?
    發(fā)表于 05-25 05:12

    Z-Stack 1.2.2a 使用znp模式,能否通過host 動態(tài)修改poll rate

    Z-Stack 1.2.2a 使用znp模式,能否通過host 動態(tài)修改poll rate,如果可以 該如何進行修改
    發(fā)表于 06-01 01:14

    如何修改BLECC2540中advertData這個數(shù)組的動態(tài)?

    1實現(xiàn)動態(tài)修改這個值0xc5 ];下面這個函數(shù)是特征值的調(diào)用返回,在這里該作何處理?static void simpleProfileChangeCB( uint8 paramID )[uint8
    發(fā)表于 10-21 09:24

    請問怎樣動態(tài)修改廣播包的內(nèi)容?

    我使用CC2540,想動態(tài)修改廣播包中的數(shù)據(jù),該怎么實現(xiàn)?藍牙BLE協(xié)議棧中有沒有支持動態(tài)修改廣播包內(nèi)容?項目需求將一些數(shù)據(jù)放在廣播中,廣播給所有的listener,并且這些數(shù)據(jù)時會
    發(fā)表于 08-04 08:00

    怎樣去修改分區(qū)表參數(shù)文件

    怎樣去創(chuàng)建可以修改分區(qū)日期數(shù)據(jù)備份?怎樣去修改分區(qū)表參數(shù)文件
    發(fā)表于 03-04 07:13

    怎樣使用STM32去支持并運行RTT動態(tài)模塊

    的驅(qū)動,因為最終編譯的動態(tài)模塊需要在文件系統(tǒng)中。進入到bsp目錄,使用env工具配置如下:為了支持動態(tài)模塊的運行,修改 bsp 對應(yīng)的 rtconfig.py 中編譯動態(tài)模塊時需要用到
    發(fā)表于 06-08 10:58

    請問N32926能否調(diào)用動態(tài)?需要修改內(nèi)核嗎?

    現(xiàn)在需要開發(fā)一個項目,中間需要用到第三方的動態(tài)庫,請問N32926能否調(diào)用動態(tài),需要修改內(nèi)核嗎?
    發(fā)表于 06-14 09:14

    Linux操作系統(tǒng)修改內(nèi)核參數(shù)的三種方法詳細說明

    linux內(nèi)核的參數(shù)設(shè)置怎么弄,Linux 操作系統(tǒng)修改內(nèi)核參數(shù)有以下三種方式:
    發(fā)表于 10-06 18:03 ?1.1w次閱讀
    Linux操作系統(tǒng)<b class='flag-5'>修改</b>內(nèi)核<b class='flag-5'>參數(shù)</b>的三種方法詳細說明

    如何在SpringBoot項目中實現(xiàn)動態(tài)定時任務(wù)

    之前寫過文章記錄怎么在SpringBoot項目中簡單使用定時任務(wù),不過由于要借助cron表達式且都提前定義好放在配置文件里,不能在項目運行中動態(tài)修改任務(wù)執(zhí)行時間,實在不太靈活。
    的頭像 發(fā)表于 09-30 11:16 ?1825次閱讀

    VH03型手持多功能讀數(shù)儀參數(shù)修改方法

    參數(shù)修改有三種實現(xiàn)方法,快捷鍵修改、參數(shù)修改模式和連接上位機指令修改
    的頭像 發(fā)表于 11-30 17:12 ?840次閱讀
    VH03型手持多功能讀數(shù)儀<b class='flag-5'>參數(shù)</b><b class='flag-5'>修改</b>方法

    教程 1-修改廣告參數(shù)

    教程 1 - 修改廣告參數(shù)
    發(fā)表于 03-15 19:39 ?0次下載
    教程 1-<b class='flag-5'>修改</b>廣告<b class='flag-5'>參數(shù)</b>

    如何動態(tài)添加修改刪除定時任務(wù)?

    如何動態(tài)添加修改刪除定時任務(wù)?那么我們一起看看具體怎么實現(xiàn),先看下本節(jié)大綱: (1)思路說明; (2)代碼解析; (3)修改定時任務(wù)執(zhí)行周期特別說明;
    的頭像 發(fā)表于 04-12 11:06 ?1098次閱讀

    教程 1-修改廣告參數(shù)

    教程 1 - 修改廣告參數(shù)
    發(fā)表于 07-06 18:49 ?0次下載
    教程 1-<b class='flag-5'>修改</b>廣告<b class='flag-5'>參數(shù)</b>

    請問Simulink如何在線動態(tài)修改模塊參數(shù)

    典型的Simulink模塊雙擊時會彈出對話框,在對話框中可以設(shè)置模塊參數(shù),如:雙擊正弦波模塊(SineWave),可以設(shè)置正弦波幅值和頻率;
    的頭像 發(fā)表于 07-20 17:23 ?6341次閱讀
    請問Simulink如何在線<b class='flag-5'>動態(tài)</b><b class='flag-5'>修改</b>模塊<b class='flag-5'>參數(shù)</b><b class='flag-5'>呢</b>?