最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+@EnableScheduling使用定時(shí)器的常見案例

 更新時(shí)間:2023年09月25日 09:41:29   作者:螞蟻舞  
項(xiàng)目開發(fā)中經(jīng)常需要執(zhí)行一些定時(shí)任務(wù),本文主要介紹了SpringBoot+@EnableScheduling使用定時(shí)器的常見案例,具有一定的參考價(jià)值,感興趣的可以了解一下

記錄一下SpringBoot+@EnableScheduling使用定時(shí)器的常見案例

我的SpringBoot版本

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.5.RELEASE</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>

啟動類

package boot.example.timer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class App {
    public static void main( String[] args )
    {
    	SpringApplication.run(App.class, args);
        System.out.println( "Hello World!" );
    }
}

必須加上這個(gè)注解 @EnableScheduling

定時(shí)器TimerService

package boot.example.timer.timer;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class TimerService {
    @Scheduled(cron = "0/1 * * * * ?")
    public void timerTest() throws IOException {
    	long now = System.currentTimeMillis();
    	DateFormat format = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");
        System.out.println("timer--"+format.format(now));
    }
}

有很多的cron表達(dá)式來指定任務(wù)在需要的時(shí)間執(zhí)行,可是有時(shí)候讓人頭疼,明明設(shè)置的cron是對的,可就是到點(diǎn)不執(zhí)行,回過頭來發(fā)現(xiàn)cron就是寫錯了,這很尷尬。

cron表達(dá)式 秒鐘(1) 分鐘(2) 小時(shí)(3) 日期(4) 月份(5) 星期(6) 年(7) 長度是7 可為啥我們在程序里寫的長度只有6呢?

比如我每秒鐘執(zhí)行一次

@Scheduled(cron = "0/1 * * * * * ?")  // SpringBoot運(yùn)行報(bào)錯
@Scheduled(cron = "0/1 * * * * ?")    // SpringBoot運(yùn)行正常

那是因?yàn)槟?7) 稍微特殊,他可以是空或者1970-2099 允許的字符有 , - * / 四種符號,實(shí)際沒有(問號) ,可能是按照規(guī)律去推以為有問號而已。

那么這個(gè)?問號到底是啥意思??問號字符只在日期(4)和星期(6)中使用,表示不確定的值 當(dāng)需要的時(shí)候在使用,日期(4)和星期(6)是互相拉扯的,用?問號可以表示不想設(shè)置。

秒(1)的案例

myw

1分鐘有60秒 因此允許值范圍是0-59符號*表示每秒符號,表示指定的秒數(shù)觸發(fā) 比如 0,2,4,6 那么就在單位分鐘內(nèi)的 0 2 4 6那個(gè)點(diǎn)觸發(fā)執(zhí)行符號-表示指定范圍區(qū)間 比如 20-40 那么就是在20到40s的區(qū)間內(nèi)每秒執(zhí)行符號/表示步進(jìn) 比如 0/1 從0秒開始每秒觸發(fā) 0/10 從0秒開始每隔10s觸發(fā)一次

1.1s執(zhí)行一次

@Scheduled(cron = "* * * * * ?")
@Scheduled(cron = "0/1 * * * * ?")

myw

2.指定在 2s 17s 34s 52s 這四個(gè)秒鐘點(diǎn)執(zhí)行

@Scheduled(cron = "2,17,34,52 * * * * ?")

myw

3.指定在20 - 30s內(nèi)每秒執(zhí)行

@Scheduled(cron = "20-30 * * * * ?")

測試可以看到是閉區(qū)間的

myw

4.從0秒開始每隔10s觸發(fā)一次

@Scheduled(cron = "0/10 * * * * ?")

myw

5.從5秒開始每隔40s觸發(fā)一次 注意這里!?。?!

@Scheduled(cron = "5/40 * * * * ?")

myw

從運(yùn)行的打印日志可以看到確實(shí)是從5s開始 40s后到了45秒執(zhí)行了一次 可下一個(gè)40s就不是這么算的了 也就是說并不是每次間隔40s了,這里是20s 40s 如此的 相當(dāng)于在5s執(zhí)行了一次 45s執(zhí)行了一次,原因嘛,反正就那樣執(zhí)行的。

6.在5-40s閉區(qū)間內(nèi)每隔2s執(zhí)行一次,這種是兩種符號的一起用

@Scheduled(cron = "5-40/2 * * * * ?")

myw

其他符號的組合?不嘗試了,有空再說。

分鐘(2)的案例

myw

1小時(shí)有60分鐘 因此允許值范圍是0-59 和 秒一樣的范圍符號*表示每分鐘符號,表示指定的分鐘觸發(fā) 比如 0,2,4,6 那么就在單位小時(shí)內(nèi)的指定分鐘數(shù) 0 2 4 6分那個(gè)點(diǎn)觸發(fā)執(zhí)行符號-表示指定范圍區(qū)間 比如 20-40 那么就是在20到40分鐘的點(diǎn)位區(qū)間內(nèi)每分鐘執(zhí)行符號/表示步進(jìn) 比如 0/1 從0分鐘開始每分鐘觸發(fā), 0/10 從0分鐘開始每隔10分鐘觸發(fā)一次

可以發(fā)現(xiàn)這些符號的意思很通用

1.1分鐘執(zhí)行一次,此時(shí)秒的那一項(xiàng)設(shè)置為0

@Scheduled(cron = "0 * * * * ?")
@Scheduled(cron = "0 0/1 * * * ?")

myw

2.指定在 26 28 32 34 這四個(gè)分鐘點(diǎn)執(zhí)行

@Scheduled(cron = "0 26,28,32,34 * * * ?")

myw

3.指定在38 - 45閉區(qū)間這段分鐘時(shí)間內(nèi)每分鐘執(zhí)行

@Scheduled(cron = "0 38-45 * * * ?")

myw

4.從0分鐘開始每隔2分鐘觸發(fā)一次

@Scheduled(cron = "0 0/2 * * * ?")

myw

5.從5分鐘開始每隔40分鐘觸發(fā)一次(實(shí)際并不完全是40分鐘)

@Scheduled(cron = "0 5/40 * * * ?")

這里和分鐘同樣的問題 執(zhí)行實(shí)際上是 每小時(shí)5分那個(gè)點(diǎn)和45分那個(gè)點(diǎn)執(zhí)行 那就是說1個(gè)小時(shí)內(nèi)執(zhí)行兩次 5分到45分 間隔40分鐘,45分到下一個(gè)5分間隔20分鐘,這里得注意并不是每隔40分鐘。

myw

6.在20-40分鐘閉區(qū)間內(nèi)每隔3分鐘執(zhí)行一次,這種是兩種符號的一起用

@Scheduled(cron = "0 20-40/3 * * * ?")

myw

其他的分鐘相關(guān)的不嘗試了。

小時(shí)(3)的案例

myw

一天有24小時(shí) 因此允許值范圍是0-23符號*表示每小時(shí)符號,表示指定的小時(shí)鐘點(diǎn)觸發(fā) 比如 1,6, 12, 19那么就在一天的 1 6 12 19點(diǎn)鐘觸發(fā)執(zhí)行符號-表示指定范圍區(qū)間 比如 8-20 那么就是在早8點(diǎn)到晚上8點(diǎn)每隔1個(gè)小時(shí)執(zhí)行一次符號/表示步進(jìn) 比如 0/1 從0時(shí)開始每小時(shí)觸發(fā) 0/2 從0點(diǎn)鐘開始每隔2小時(shí)觸發(fā)一次,2/3 從2點(diǎn)鐘開始每隔3小時(shí)執(zhí)行一次

1.每小時(shí)執(zhí)行一次

@Scheduled(cron = "0 0 * * * ?")
@Scheduled(cron = "0 0 0/1 * * ?")

myw

2.在15點(diǎn)到17點(diǎn)之間每隔一小時(shí)執(zhí)行一次

@Scheduled(cron = "0 0 15-17 * * ?")

myw

3.指定在 2點(diǎn)鐘 10點(diǎn)鐘 12點(diǎn)鐘 18點(diǎn)鐘 這四個(gè)小時(shí)點(diǎn)位執(zhí)行

@Scheduled(cron = "0 0 2,10,12,18 * * ?")

4.從0時(shí)開始每隔4小時(shí)觸發(fā)一次

@Scheduled(cron = "0 0 0/4 * * ?")

5.從2點(diǎn)鐘開始每隔18小時(shí)觸發(fā)一次 注意?。。。?/strong>

@Scheduled(cron = "0 0 2/18 * * ?")

這里沒去測試了,等的時(shí)間太久了,2點(diǎn)鐘執(zhí)行一次 18小時(shí)候20點(diǎn)鐘執(zhí)行一下,下一個(gè)就超過了24小時(shí),因此在第二天的2點(diǎn)鐘執(zhí)行一次,這樣間隔是6小時(shí) 18小時(shí),并不一定是每次間隔18小時(shí)的,得注意小時(shí)的范圍是0-23。

6.在2-18點(diǎn)鐘閉區(qū)間內(nèi)每隔3小時(shí)執(zhí)行一次,這種是兩種符號的一起用

@Scheduled(cron = "0 0 2-18/3 * * ?")

日期(4)的案例

myw

一個(gè)月大概是30天 有31天的 因此允許值范圍是1-31 如果說當(dāng)月沒有第31天 那么會拋出異常符號*表示每天符號,表示指定的天觸發(fā) 比如 1,3, 5, 7那么就在當(dāng)月的 第一天,第三天,第五天,第七天觸發(fā)執(zhí)行符號-表示指定范圍區(qū)間 比如 2-20 那么就是在當(dāng)月的第二天到第二十天之間每隔一天執(zhí)行一次,閉區(qū)間內(nèi),第二天和第二十天也包含在內(nèi)符號/表示步進(jìn) 比如 2/3表示從第2天開始每隔3天執(zhí)行一次,1/1表示從第一天開始每天執(zhí)行一次符號?表示不確定的值,很少用到的符號L在這里表示當(dāng)月的最后一天符號W表示指定離給定日期最近的工作日(周一到周五) 沒用過符號C意思是Calendar,沒用過

這里寫幾個(gè)案例(未測試驗(yàn)證)

1.每天執(zhí)行一次

@Scheduled(cron = "0 0 0 1/1 * ?")
@Scheduled(cron = "0 0 0 * * ?")

2.當(dāng)月的1,3,5,7四天執(zhí)行一次

@Scheduled(cron = "0 0 0 1,3,5,7 * ?")

3.2-20日每天執(zhí)行一次

@Scheduled(cron = "0 0 0 2-20 * ?")

4.10-25日每隔三天執(zhí)行

@Scheduled(cron = "0 0 0 10-25/3 * ?")

月份(5)的案例

myw

一年有12個(gè)月 因此允許值范圍是1-12,或者英文JAN-DEC符號*表示每個(gè)月符號,表示指定的月份觸發(fā) 比如 1,6, 12那么就在1月 6月 12月觸發(fā)執(zhí)行符號-表示指定范圍區(qū)間 比如 2-8 那么就是在2月到8月的閉區(qū)間內(nèi)每月執(zhí)行一次符號/表示步進(jìn) 比如 1/1 從1月開始每隔一個(gè)月觸發(fā)一次,2/3 從2月開始每隔3個(gè)月執(zhí)行一次

英文12個(gè)月份的縮寫

1月-1-JAN2月-2-FEB3月-3-MAR4月-4-APR5月-5-MAY6月-6-JUN7月-7-JUL8月-8-AUG9月-9-SEP10月-10-OCT11月-11-NOV12月-12-DEC

這里寫幾個(gè)案例(未測試驗(yàn)證)

1.每月執(zhí)行一次

@Scheduled(cron = "0 0 0 1 * ?")
@Scheduled(cron = "0 0 0 1 1/1 ?")

2.2月,4月,6月,8月執(zhí)行一次

@Scheduled(cron = "0 0 0 1 2,4,6,8 ?")
@Scheduled(cron = "0 0 0 1 FEB,APR,JUN,AUG ?")

3.2月-10月每隔三個(gè)月執(zhí)行一次

@Scheduled(cron = "0 0 0 1 2-10/3 ?")
@Scheduled(cron = "0 0 0 1 FEB-OCT/3 ?")

其他的遇到再記錄

星期(6)的案例

myw

一個(gè)星期有七天 因此允許值范圍是1-7 當(dāng)然也可以英文字母(SUN-SAT)符號*表示每個(gè)星期符號,表示指定的星期幾觸發(fā)符號-表示指定范圍區(qū)間符號/表示步進(jìn)符號L 當(dāng)用在星期里的話表示星期的最后一天也就是星期六觸發(fā),在L前面加數(shù)字 比如2L 3L這種表示每個(gè)月的最后一個(gè)星期的星期幾執(zhí)行一次,有些難以理解,很多博客資料都這樣說就這樣定吧,測試的話花的時(shí)間太長,免了不去驗(yàn)證了!

其他符號略過

這里著重注意?。。。。?/strong>星期的話 用英文字母 :星期天-SUN, 星期一-MON, 星期二-TUE, 星期三-WED, 星期四-THU,星期五-FRI,星期六-STA星期的話 用數(shù)字 是從星期一開始的,并不是星期天,這倒是有個(gè)坑在這里兒,也就是說 星期天-7,星期一-1,星期二-2,星期三-3,星期四-4,星期五-5,星期六-6

我這里使用的是SpringBoot2.0.x做的測試
可以證明至少在這個(gè)版本1-7指的是星期一到星期天

myw

可以查日歷知道2023-07-19就是星期三 我寫了一個(gè)執(zhí)行的cron 星期三對應(yīng)的就是3
就是說1對應(yīng)的不是星期天 而是星期一

再看直接寫WED 星期三

myw

所以建議使用字母方式

這里寫幾個(gè)案例(未測試驗(yàn)證)

1.每周星期三的零點(diǎn)零分零秒執(zhí)行一次

@Scheduled(cron = "0 0 0 ? * WED")
@Scheduled(cron = "0 0 0 ? * 3")

2.星期天,星期二,星期四零點(diǎn)零分零秒執(zhí)行一次

@Scheduled(cron = "0 0 0 ? * SUN,TUE,THU")
@Scheduled(cron = "0 0 0 ? * 7,2,4")

3.工作日每天零點(diǎn)零分零秒執(zhí)行一次(星期一到星期五)

@Scheduled(cron = "0 0 0 ? * MON-FRI")
@Scheduled(cron = "0 0 0 ? * 1-5")

4.星期一到星期天 每隔兩天執(zhí)行一次

@Scheduled(cron = "0 0 0 ? * MON-STA/2")
@Scheduled(cron = "0 0 0 ? * 1-6/2")

其他單獨(dú)關(guān)于星期的案例用到再補(bǔ)充

年(7)的案例

myw

這個(gè)世界有多少年,都不知道,目前年份很少用到,要么留空,要么區(qū)間1970-2099年閉區(qū)間內(nèi)符號*表示每年符號,表示指定的年觸發(fā) 比如 2023,2025, 2030那么就在那年會觸發(fā)執(zhí)行符號-表示指定范圍區(qū)間 比如 2023-2033 那么就是在2023年到2033年每年執(zhí)行一次符號/表示步進(jìn) 比如 2023/1 從2023年開始每年觸發(fā)一次 2023/3 從2023年開始每隔3年執(zhí)行一次

按年的例子,沒有用到過,隨意嘗試了幾個(gè),程序都報(bào)錯,也不是剛需,于是不去折騰例子了,先按照符號表達(dá)的意思去理解,如果有問題在更改。

到此這篇關(guān)于SpringBoot+@EnableScheduling使用定時(shí)器的常見案例的文章就介紹到這了,更多相關(guān)SpringBoot+@EnableScheduling定時(shí)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 整合 Redis詳解從基礎(chǔ)操作到實(shí)戰(zhàn)應(yīng)用

    Spring Boot 整合 Redis詳解從基礎(chǔ)操作到實(shí)戰(zhàn)應(yīng)用

    文章介紹了SpringBoot整合Redis的必要性、步驟及核心數(shù)據(jù)類型,涵蓋分布式鎖、緩存注解等高級功能,并提供最佳實(shí)踐如鍵命名規(guī)范和內(nèi)存優(yōu)化,強(qiáng)調(diào)二者結(jié)合提升應(yīng)用性能與可擴(kuò)展性,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Spring boot 基本部署方式

    Spring boot 基本部署方式

    SpringBoot部署也是非常簡單,需要把打包輸出的包由jar改為war。具體部署方式大家參考下本文
    2017-08-08
  • 詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java后端實(shí)現(xiàn)MD5加密的方法

    Java后端實(shí)現(xiàn)MD5加密的方法

    有的時(shí)候因?yàn)闃I(yè)務(wù)的需要,我們要制作關(guān)于密碼的修改功能。而關(guān)于密碼的加密一般都是用MD5,那么這篇文章將介紹如何在Java的后端實(shí)現(xiàn)MD5加密,有需要的可以參考借鑒。
    2016-08-08
  • SpringDataJpa如何使用union多表分頁條件查詢

    SpringDataJpa如何使用union多表分頁條件查詢

    這篇文章主要介紹了SpringDataJpa如何使用union多表分頁條件查詢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實(shí)現(xiàn)深度搜索DFS算法詳解

    Java實(shí)現(xiàn)深度搜索DFS算法詳解

    深度優(yōu)先搜索是一種在開發(fā)爬蟲早期使用較多的方法。它的目的是要達(dá)到被搜索結(jié)構(gòu)的葉結(jié)點(diǎn)。這篇文章主要介紹了基于Java實(shí)現(xiàn)深度優(yōu)先搜索(DFS)算法,需要的朋友可以參考一下
    2021-12-12
  • 最新版Eclipse安裝、配置圖文教程詳解

    最新版Eclipse安裝、配置圖文教程詳解

    這篇文章主要介紹了新版Eclipse安裝、配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java中字符串參數(shù)化符號${}的解析

    java中字符串參數(shù)化符號${}的解析

    這篇文章主要給大家介紹了java中字符串參數(shù)化符號${}是如何解析的,文中給出了詳細(xì)的分析與解決代碼,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Java內(nèi)部類的使用教程詳解

    Java內(nèi)部類的使用教程詳解

    在Java中,有些類可以被定義在另一個(gè)類的內(nèi)部,我們把在一個(gè)類里面定義的類稱為內(nèi)部類。本文主要介紹了Java內(nèi)部類的使用,需要的可以參考一下
    2023-04-04
  • java實(shí)現(xiàn)OpenGL ES紋理映射的方法

    java實(shí)現(xiàn)OpenGL ES紋理映射的方法

    這篇文章主要介紹了java實(shí)現(xiàn)OpenGL ES紋理映射的方法,以實(shí)例形式較為詳細(xì)的分析了紋理映射的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06

最新評論

通渭县| 石屏县| 井研县| 务川| 宁河县| 凌海市| 苏州市| 垣曲县| 旅游| 海林市| 武川县| 阿克苏市| 张家港市| 沁水县| 陵川县| 墨竹工卡县| 顺昌县| 福州市| 新沂市| 阳高县| 平乐县| 阳西县| 香河县| 杭锦旗| 湘潭市| 高尔夫| 巩义市| 额敏县| 红原县| 马边| 韶山市| 芷江| 东乌珠穆沁旗| 湟源县| 西安市| 如东县| 岑巩县| 高平市| 福清市| 恩施市| 阿拉善左旗|