SpringBoot 任務調度動態設置
1.初始化入口(注解 @PostConstruct)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@PostConstruct private void initTimedTask() { //初始化任務調度器cron,可以從數據庫中查詢到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.任務調度類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class TimedTask implements Runnable{ Logger logger = Logger.getLogger(TimedTask . class ); private ThreadPoolTaskScheduler threadPoolTaskScheduler; @Override public void run() { logger.info( "每月最后一天定時發送彩信任務啟動準備發送!" ); //業務邏輯 } /** * 設置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 調度任務
1.首先需要用@EnableScheduling
注解到*applicatin.java,用來檢測是否有調度任務。
2.@Scheduled 注解用于標注
這個方法是一個定時任務的方法。Spring會自動掃描這個注解,啟動調度任務。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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; /** * 一分鐘執行一次 */ @Scheduled (cron= "0 0/1 * * * ?" ) public void executeFileDownLoadTask() { System.out.println( ">>>>>>>>>>>>>>>>>>>任務執行 " +userService.findAll().size()); } } |
調度任務的時間配置用的是cron表達式,推薦一個在線生成表達式的網站,如果自己不會寫或者不愿意自己寫,可以用這個網站直接生成:
http://cron.qqe2.com/
截圖如下:
一些常用的任務表達式
例子:
-
0 * * * * ?
每1分鐘觸發一次 -
0 0 * * * ?
每天每1小時觸發一次 -
0 0 10 * * ?
每天10點觸發一次 -
0 * 14 * * ?
在每天下午2點到下午2:59期間的每1分鐘觸發 -
0 30 9 1 * ?
每月1號上午9點半 -
0 15 10 15 * ?
每月15日上午10:15觸發 -
/5 * * * ?
每隔5秒執行一次 -
0 /1 * * ?
每隔1分鐘執行一次 -
0 0 5-15 * * ?
每天5-15點整點觸發 -
0 0/3 * * * ?
每三分鐘觸發一次 -
0 0-5 14 * * ?
在每天下午2點到下午2:05期間的每1分鐘觸發 -
0 0/5 14 * * ?
在每天下午2點到下午2:55期間的每5分鐘觸發 -
0 0/5 14,18 * * ?
在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發 -
0 0/30 9-17 * * ?
朝九晚五工作時間內每半小時 -
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觸發 -
0 15 10 ? * MON-FRI
周一至周五的上午10:15觸發 -
0 0 23 L * ?
每月最后一天23點執行一次 -
0 15 10 L * ?
每月最后一日的上午10:15觸發 -
0 15 10 ? * 6L
每月的最后一個星期五上午10:15觸發 -
0 15 10 * * ?
2005 2005年的每天上午10:15觸發 -
0 15 10 ? * 6L
2002-2005 2002年至2005年的每月的最后一個星期五上午10:15觸發 -
0 15 10 ? * 6#3
每月的第三個星期五上午10:15觸發
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/u011482897/article/details/102856720