如何動(dòng)態(tài)修改cron參數(shù)呢?那么我們一起看看具體怎么實(shí)現(xiàn),先看下本節(jié)大綱:
(1)簡(jiǎn)單方式:修改定時(shí)任務(wù)的執(zhí)行周期;
(2)動(dòng)態(tài)修改定時(shí)任務(wù)的執(zhí)行周期;
接下來(lái)看下本節(jié)的具體內(nèi)容:
(1)簡(jiǎn)單方式:修改定時(shí)任務(wù)的執(zhí)行周期;
按正常來(lái)講,修改定時(shí)任務(wù)的執(zhí)行周期,把服務(wù)停下來(lái),改下任務(wù)的cron參數(shù),再重啟服務(wù)就搞搞定了。這種方式很簡(jiǎn)單,沒有可說(shuō)的,但是有沒有一種可能,在不停服務(wù)的情況下,就可以動(dòng)態(tài)的修改任務(wù)的cron參數(shù)呢?哈哈,那是必須的必。
(2)動(dòng)態(tài)修改定時(shí)任務(wù)的執(zhí)行周期;
首先我們先會(huì)回顧下,我們之前是使用了@Scheduled(cron =“0/5 * * * * *”)這種方式適用于固定任務(wù)周期的任務(wù),若要修改任務(wù)執(zhí)行周期,只能走“停服務(wù)—修改任務(wù)執(zhí)行周期—重啟服務(wù)”這條路。那么如何動(dòng)態(tài)修改呢,我們看下步驟:
① 在定時(shí)任務(wù)類上增加@EnabledScheduling注解,并實(shí)現(xiàn)SchedulingConfigurer接口。
② 設(shè)置一個(gè)靜態(tài)的cron,用于存放任務(wù)執(zhí)行周期參數(shù)。
③ 開啟一個(gè)線程,用于模擬實(shí)際業(yè)務(wù)中外部原因修改了任務(wù)執(zhí)行周期。
④ 設(shè)置任務(wù)觸發(fā)器,觸發(fā)任務(wù)執(zhí)行。
具體的代碼如下:
package com.kfit.task;
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定時(shí)任務(wù)動(dòng)態(tài)修改cron****參數(shù)
- @author Angel --守護(hù)天使
- @version v.0.1
- @date 2017年4月6日
*/
@Component
@EnableScheduling
**public **class TaskCronChange implements SchedulingConfigurer{
**public ****static** String *cron* ;
**public** TaskCronChange() {
//默認(rèn)情況是:每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這個(gè)類有一個(gè)方法addTriggerTask(Runnable,Trigger) 兩個(gè)參數(shù),一個(gè)Runnable,一個(gè)是Trigger,在Runnable中執(zhí)行業(yè)務(wù)邏輯代碼,在Trigger修改定時(shí)任務(wù)的執(zhí)行周期。
啟動(dòng)查看控制臺(tái)的打印信息如下:
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
-
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105166 -
服務(wù)
+關(guān)注
關(guān)注
0文章
75瀏覽量
18541
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
cron和crontab命令
DM8168編碼器可以動(dòng)態(tài)來(lái)修改來(lái)修改profile、level嗎?
Z-Stack 1.2.2a 使用znp模式,能否通過(guò)host 動(dòng)態(tài)的修改poll rate
如何修改BLECC2540中advertData這個(gè)數(shù)組的動(dòng)態(tài)?
請(qǐng)問(wèn)怎樣動(dòng)態(tài)修改廣播包的內(nèi)容?
怎樣去修改分區(qū)表參數(shù)文件呢
怎樣使用STM32去支持并運(yùn)行RTT動(dòng)態(tài)模塊呢
請(qǐng)問(wèn)N32926能否調(diào)用動(dòng)態(tài)庫(kù)呢?需要修改內(nèi)核嗎?
Linux操作系統(tǒng)修改內(nèi)核參數(shù)的三種方法詳細(xì)說(shuō)明
![Linux操作系統(tǒng)<b class='flag-5'>修改</b>內(nèi)核<b class='flag-5'>參數(shù)</b>的三種方法詳細(xì)說(shuō)明](https://file.elecfans.com/web1/M00/C7/C3/o4YBAF9twZSAJYSTAACVlMZeohY267.png)
如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)
如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?
請(qǐng)問(wèn)Simulink如何在線動(dòng)態(tài)修改模塊參數(shù)呢?
![請(qǐng)問(wèn)Simulink如何在線<b class='flag-5'>動(dòng)態(tài)</b><b class='flag-5'>修改</b>模塊<b class='flag-5'>參數(shù)</b><b class='flag-5'>呢</b>?](https://file1.elecfans.com/web2/M00/8D/52/wKgaomS4_L6AWK67AASGkXAYN58507.jpg)
評(píng)論