SpringBoot 任務(wù)調(diào)度動態(tài)設(shè)置方式(不用重啟服務(wù))
SpringBoot 任務(wù)調(diào)度動態(tài)設(shè)置
1.初始化入口(注解 @PostConstruct)
@PostConstruct
private void initTimedTask() {
//初始化任務(wù)調(diào)度器cron,可以從數(shù)據(jù)庫中查詢到cron值
List<Tweek> tweeks=tweekService.listAll(new Tweek());
String cron=tweeks.get(0).getCron();
if("".equals(cron)){
}else{
//啟動
setTaskTimedCron(cron);
}
}
TimedTask taskt;
public void setTaskTimedCron(String cron) {
if (null == taskt) {
taskt= new TimedTask ();
}
taskt.restart(cron);
}
2.任務(wù)調(diào)度類
public class TimedTask implements Runnable{
Logger logger = Logger.getLogger(TimedTask .class);
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
@Override
public void run() {
logger.info("每月最后一天定時發(fā)送彩信任務(wù)啟動準(zhǔn)備發(fā)送!");
//業(yè)務(wù)邏輯
}
/**
* 設(shè)置cron并啟動
* @param cron值
*/
public void restart(String cron) {
if (null != this.threadPoolTaskScheduler) {
ScheduledExecutorService scheduledExecutorService = this.threadPoolTaskScheduler.getScheduledExecutor();
if (!scheduledExecutorService.isShutdown()) {
scheduledExecutorService.shutdownNow();
}
this.threadPoolTaskScheduler.destroy();
}
if (null != cron&& cron.trim().length() > 0) {
this.threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
this.threadPoolTaskScheduler.setThreadNamePrefix("timedTask ");
this.threadPoolTaskScheduler.initialize();
this.threadPoolTaskScheduler.schedule(this, new CronTrigger(cron));
}
}
}
SpringBoot 調(diào)度任務(wù)
1.首先需要用@EnableScheduling
注解到*applicatin.java,用來檢測是否有調(diào)度任務(wù)。
2.@Scheduled 注解用于標(biāo)注
這個方法是一個定時任務(wù)的方法。Spring會自動掃描這個注解,啟動調(diào)度任務(wù)。
package com.david.translate.quartz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.david.translate.service.SysUserService;
@Component
public class TimeQuartz {
@Autowired
private SysUserService userService;
/**
* 一分鐘執(zhí)行一次
*/
@Scheduled(cron="0 0/1 * * * ?")
public void executeFileDownLoadTask() {
System.out.println(">>>>>>>>>>>>>>>>>>>任務(wù)執(zhí)行 "+userService.findAll().size());
}
}
調(diào)度任務(wù)的時間配置用的是cron表達(dá)式,推薦一個在線生成表達(dá)式的網(wǎng)站,如果自己不會寫或者不愿意自己寫,可以用這個網(wǎng)站直接生成:
http://cron.qqe2.com/
截圖如下:

一些常用的任務(wù)表達(dá)式
例子:
0 * * * * ?每1分鐘觸發(fā)一次0 0 * * * ?每天每1小時觸發(fā)一次0 0 10 * * ?每天10點觸發(fā)一次0 * 14 * * ?在每天下午2點到下午2:59期間的每1分鐘觸發(fā)0 30 9 1 * ?每月1號上午9點半0 15 10 15 * ?每月15日上午10:15觸發(fā)/5 * * * ?每隔5秒執(zhí)行一次0 /1 * * ?每隔1分鐘執(zhí)行一次0 0 5-15 * * ?每天5-15點整點觸發(fā)0 0/3 * * * ?每三分鐘觸發(fā)一次0 0-5 14 * * ?在每天下午2點到下午2:05期間的每1分鐘觸發(fā)0 0/5 14 * * ?在每天下午2點到下午2:55期間的每5分鐘觸發(fā)0 0/5 14,18 * * ?在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發(fā)0 0/30 9-17 * * ?朝九晚五工作時間內(nèi)每半小時0 0 10,14,16 * * ?每天上午10點,下午2點,4點0 0 12 ? * WED表示每個星期三中午12點0 0 17 ? * TUES,THUR,SAT每周二、四、六下午五點0 10,44 14 ? 3 WED每年三月的星期三的下午2:10和2:44觸發(fā)0 15 10 ? * MON-FRI周一至周五的上午10:15觸發(fā)0 0 23 L * ?每月最后一天23點執(zhí)行一次0 15 10 L * ?每月最后一日的上午10:15觸發(fā)0 15 10 ? * 6L每月的最后一個星期五上午10:15觸發(fā)0 15 10 * * ?2005 2005年的每天上午10:15觸發(fā)0 15 10 ? * 6L2002-2005 2002年至2005年的每月的最后一個星期五上午10:15觸發(fā)0 15 10 ? * 6#3每月的第三個星期五上午10:15觸發(fā)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用H2嵌入式數(shù)據(jù)庫的實例代碼
本文通過實例代碼給大家介紹了SpringBoot使用H2嵌入式數(shù)據(jù)庫的相關(guān)知識,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-10-10
Spring Boot實現(xiàn)對文件進(jìn)行壓縮下載功能
在Web應(yīng)用中,文件下載功能是一個常見的需求,特別是當(dāng)你需要提供用戶下載各種類型的文件時,本文將演示如何使用Spring Boot框架來實現(xiàn)一個簡單而強(qiáng)大的文件下載功能,需要的朋友跟隨小編一起學(xué)習(xí)吧2023-09-09
SpringMVC中@Valid不起效BindingResult讀取不到Error信息
在寫SpringMVC項目時,由于要對表單數(shù)據(jù)進(jìn)行校驗,需要使用@Valid進(jìn)行校驗,但是在進(jìn)行數(shù)據(jù)校驗時,BindingResult對象無法攔截非法表單數(shù)據(jù),result.hasErrors()無論怎么輸入都會返回false,本文詳細(xì)的介紹一下解決方法2021-09-09
使用SpringBoot+nmap4j獲取端口信息的代碼詳解
這篇文章主要介紹了使用 SpringBoot + nmap4j 獲取端口信息,包括需求背景、nmap4j 的相關(guān)介紹、代碼說明(含測試代碼、改造后的代碼及參數(shù)說明),還提到了文件讀取方式和依賴引入方式,最終請求能獲取到數(shù)據(jù),需要的朋友可以參考下2025-01-01
使用IDEA創(chuàng)建java項目的步驟詳解(hello word)
這篇文章主要介紹了使用IDEA創(chuàng)建java項目的步驟詳解(hello word),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Java運(yùn)用設(shè)計模式中的建造者模式構(gòu)建項目的實例解析
這篇文章主要介紹了Java運(yùn)用設(shè)計模式中的建造者模式構(gòu)建項目的實例解析,建造者模式對外隱藏創(chuàng)建過程的產(chǎn)品,使用組合的方式,由指揮者來決定建造的流程,需要的朋友可以參考下2016-04-04
Java concurrency之鎖_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency之鎖的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

