使用Scheduled的方式實作定時任務
本意:想凌晨1點定時執行服務層的某個方法,那么如果在非Service/非Controller層成功注入Service層,需要將注入的物件交由靜態物件管理,
注入完成后按需改變@Scheduled后面域即可實作定時任務
import com.scau.amops.service.IAmopsAgrimacRunrecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class TimingTask {
@Autowired
IAmopsAgrimacRunrecordService amopsAgrimacRunrecordServiceAuto; //注入物件
private static IAmopsAgrimacRunrecordService amopsAgrimacRunrecordService; //靜態物件
@PostConstruct
public void init(){
amopsAgrimacRunrecordService = this.amopsAgrimacRunrecordServiceAuto; //注入的物件由靜態物件管理
}
//每天凌晨1點定時執行該任務
@Scheduled(cron = "0 0 1 * * ?")
public void timingExecuteCalculateRunRecordToSecond() {
amopsAgrimacRunrecordService.calculateAmopsAgrimacRunrecordToSecond();
}
}
@Scheduled(cron = "0 0 1 * * *")中的域如何更改?
cron運算式中可以有6個或7個域,年不是必須的域,可以省略年,則一共6個域
@Scheduled(cron = "秒 分 時 日 月 周 年")
域范圍
| 域 | 范圍 | 可使用的通配符 |
|---|---|---|
| 秒 | 0-59 | , - * / |
| 分 | 0-59 | , - * / |
| 時 | 0-23 | , - * / |
| 日 | 1-31 | , - * ? / L W |
| 月 | 1-12 / JAN-DEC | , - * / |
| 周 | 1-7 or SUN-SAT | , - * ? / L # |
| 年 | 1970-2099 | , - * / |
通配符說明:
,表示指定多個值,比如周設定為MON,FRI,表示周一和周五觸發-表示區間,設定小時為15-17,表示15,16,17點都會觸發*表示所有值,設定日為*,表示每天都會觸發/用于遞增觸發,設定日為1/5,表示所示每月1號開始,每隔5天觸發一次?表示不指定值,使用的場景為不需要關心當前設定這個欄位的值L表示最后的意思,只可用在日和周,設定日為L,表示當月的最后一日,周欄位上設定6L這樣的格式,則表示本月最后一個星期五W表示離指定日期的最近那個作業日(周一至周五),設定日為10W,表示離每月10號最近的那個作業日觸發#序號(表示每月的第幾個周幾),設定周為1#2表示在每月的第2個周一
注:L和W可以一組合使用,如果在日欄位上設定LW,則表示在本月的最后一個作業日觸發
一些小示例供參考:
- 每隔10秒觸發一次:
"*/10 * * * * ?" - 每隔10分鐘觸發一次:
"0 */10 * * * ?" - 每天凌晨1點觸發一次:
"0 0 1 * * ?" - 每月5號凌晨1點觸發一次:
"0 0 1 5 * ?" - 每月最后一天22點觸發一次:
"0 0 22 L * ?" - 每周日凌晨1點觸發一次:
"0 0 1 ? * L" - 在20分、40分、59分都觸發一次:
"0 20,40,59 * * * ?" - 每天的8點、12點、18點、22點都觸發一次:
"0 0 8,12,18,22 * * ?" - 表示在每月的1日的凌晨2點觸發一次:
"0 0 2 1 * ? *" - 表示周一到周五每天上午8:30觸發一次:
"0 30 8 ? * MON-FRI"/"0 30 8 ? * 1-5" - 表示2020-2030年的每個月的最后一個星期五上午10:00觸發一次:
"0 0 10 ? * 6L 2020-2030"
歡迎小伙伴討論,如有錯誤請在評論區評論或發私聊訊息,謝謝你,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/235702.html
標籤:java
上一篇:Python期末習題練習
