一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Spring Boot 定時任務的實現方法

詳解Spring Boot 定時任務的實現方法

2020-10-21 21:42tuicool Java教程

最近在用SpringBoot寫一個關于定時項目的時候遇到一個問題,下面小編把如何處理定時任務的解決思路分享給大家 ,需要的朋友參考下

最近在用SpringBoot寫一個關于定時項目的時候遇到一個問題,就是客戶端訪問服務器的結果實際上是每個一段時間發生一次變化,并且在服務器在每天的某個固定的時間點都要觸發一次事件。

我們當然可以在遇到每一個請求時都重新計算結果,但是為了提高效率,我們顯然可以讓服務器每隔一段時間計算一次結果,并且把這個結果進行保存,對在下一個時間段內的每個請求都直接返回計算后的結果。這樣就能較好的提高了服務器的性能。

那么問題就在于如何處理定時任務。其實SpringBoot早就提供了非常方便的接口,但是網上的介紹還是有點亂的,我就記錄下具體操作的注意點方便以后查找。

創建定時服務

一般來說定時服務會寫在一個Component里,方便管理。對于定時任務,我們其實只要在需要定時執行的函數前加上 @Scheduled 注解,比如下面這樣:

?
1
2
3
4
5
6
7
@Component
public class ScheduledTask{
  @Scheduled(fixedRate = 5000)
  public void scheduledTask(){
    //do sth...
  }
}

與此同時,我們還要在項目的啟動文件里配置上 @EnableScheduling 注解,告訴項目我們是支持定時任務的:

?
1
2
3
4
5
6
7
@SpringBootApplication
@EnableScheduling
public class LotteryApplication{
 public static void main(String[] args){
 SpringApplication.run(LotteryApplication.class, args);
 }
}

這樣我們的函數就能定時執行了。

Scheduled參數

Scheduled主要支持 fixRate , fixDelay , cron , initialDelay 這些參數,下面做簡要說明。

fixRate和fixDelay

fixRate和fixDelay參數都指定了函數每隔某個毫秒數執行一次,但是他們之間也有細小的差別。

fixRate

fixRate的計時是相對于系統時間的,也就是一定相隔會固定時間執行。

fixDelay

fixDelay的計時是相對于上一次調用的時間的,因此他受其他程序調用的影響,如果該函數在其他地方被手動調用,那么這個計時器就會重新計時。

initialDelay參數

initialDelay參數是個額外參數,比較簡單,就是指定從項目開始運行到該函數首次被調用的執行時間,以毫秒計。

如果不指定這個參數,這個值就是-1,也就是程序開始時不執行。

在不知到initialDelay這個參數的時候為了讓程序啟動時立即調用該函數,我讓這個定時類繼承了 InitializingBean 并在重寫的 afterPropertiesSet 方法中手動調用了這個函數。。。現在看起來還真是愚蠢。。。

cron

這個Cron是最復雜也是高度自定義化的定時工具,在Linux系統里也有類似的crontab命令。他其實是更加細致的定義了定時任務,以一個字符串的形式進行表示。

在SpringBoot中,一個cron字符串是由六個部分以空格組成的字符串,文檔中的例子是這樣的:

?
1
2
3
4
5
6
7
"0 0 * * * *" = the top of every hour of every day.
"*/10 * * * * *" = every ten seconds.
"0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
"0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day.
"0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day.
"0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
"0 0 0 25 12 ?" = every Christmas Day at midnight

六個部分分別表示秒、分、時、日、月、周。

他支持'-‘表示范圍,'*'表示通配,'/‘表示在左邊的時間匹配后間隔右邊的時間,'?'一般表示周的通配。

具體的使用方法還要參考相關文檔。

網上有很多類似 Cron表達式測試工具 這樣的測試工具,方便我們測試自己寫的Cron表達式。

下面一個例子表示每隔五分鐘執行一次:

?
1
2
3
4
@Scheduled(cron = "0 0/5 * * * ?")
public void fiveMinutes(){
  //do sth.
}

注意點

在實際使用Scheduled注解時,我們一定要指定且僅僅指定fixRate、fixDelay、cron當中的一個,否則肯定會導致錯誤。當然,我們可以任意指定initialDelay參數。

以上所述是小編給大家介紹的Spring Boot 定時任務的實現方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

原文鏈接:http://www.tuicool.com/articles/IbAbyiN

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99ri在线精品视频在线播放 | 日本人做受全过程视频 | 韩国美女激情vip | 国内精品久久久久香蕉 | 色老板最新网站视频地址 | 四虎884aa永久播放地址http | 亚洲一区二区三区免费视频 | 国产欧美日韩一区二区三区在线 | 日韩欧美亚洲一区二区综合 | 日本h乱淫动漫在线观看 | 9久热这里只有精品视频在线观看 | 潘金莲西门庆一级淫片aaaaaa | 欧美a级v片在线观看一区 | 免费看隐私男生网站 | 青草精品 | 校花在公车上被内射好舒 | 色婷婷天天综合在线 | 四虎伊人 | 性猛交娇小69hd | 国产成人精品第一区二区 | 日本免费不卡在线一区二区三区 | 奇米狠狠色| 精品国产免费第一区二区 | 婷婷综合缴情亚洲五月伊 | 日韩精品中文字幕久久 | 非洲黑人xxxxxbbbbb | 欧美老人与小伙子性生交 | 日韩欧美一区二区三区免费观看 | 欧美最猛性xxxxx69交 | 亚洲精品成人AV在线观看爽翻 | 青青青青在线视频 | 欧洲肥女大肥臀 | 亚洲免费一 | 久久精品国产亚洲AV蜜臀 | 4455四色永久免费 | 久久国产加勒比精品无码 | 精品久久香蕉国产线看观看麻豆 | 青青操在线 | 国产精品久久久久影院色老大 | 久久日本片精品AAAAA国产 | 国产三级自拍视频 |