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

Spring定時(shí)任務(wù)之fixedRateString的實(shí)現(xiàn)示例

 更新時(shí)間:2025年09月23日 10:46:46   作者:AlianNiew  
本文主要介紹了Spring定時(shí)任務(wù)之fixedRateString的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在 Spring Framework 的開(kāi)發(fā)中,@Scheduled 注解是我們實(shí)現(xiàn)定時(shí)任務(wù)的利器。其中,fixedRateString 屬性允許我們通過(guò)字符串來(lái)配置任務(wù)執(zhí)行的固定速率。從 Spring 5 開(kāi)始,為了更好地支持 Java 8 的日期時(shí)間 API,fixedRateString(以及 fixedDelayString, initialDelayString)開(kāi)始支持 java.time.Duration 的格式進(jìn)行解析。

這為我們提供了比毫秒數(shù)字更優(yōu)雅、更易讀的配置方式。今天,我們就來(lái)深入探討一下這個(gè)強(qiáng)大的功能。

從毫秒到 Duration:為何要改變?

在舊版本中,我們通常這樣配置:

@Scheduled(fixedRate = 5000) // 每5秒執(zhí)行一次
public void doTask() {
    // 任務(wù)邏輯
}

或者使用字符串形式(為了支持占位符):

@Scheduled(fixedRateString = "5000") // 從配置文件中讀取,例如:scheduled.rate=5000
public void doTask() {
    // 任務(wù)邏輯
}

這種方式雖然直接,但可讀性較差。看到 5000,你需要反應(yīng)一下才知道是 5 秒。而 Duration 格式則一目了然:

@Scheduled(fixedRateString = "PT5S") // 清晰明了:Period of Time 5 Seconds
public void doTask() {
    // 任務(wù)邏輯
}

核心:java.time.Duration.parse 支持的格式

Spring 底層使用 java.time.Duration.parse(CharSequence) 方法來(lái)解析 fixedRateString 的值。該方法遵循 ISO-8601 持續(xù)時(shí)間格式。

其正則表達(dá)式定義如下: ([-+]?)P(?:([-+]?[0-9]+)D)?(T(?:([-+]?[0-9]+)H)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)(?:[.,]([0-9]{0,9}))?S)?)?

看起來(lái)復(fù)雜,但其結(jié)構(gòu)非常清晰,可以分解為:

基本結(jié)構(gòu): P[n]Y[n]M[n]W[n]D[T[n]H[n]M[n]S]]

  • P (必需): 是“Period”的縮寫(xiě),表示持續(xù)時(shí)間段的開(kāi)始。
  • T (可選): 是“Time”的縮寫(xiě),用于分隔日期部分和時(shí)間部分。如果要指定小時(shí)、分鐘或秒,則必須有 T。

日期部分 (在 P 之后,T 之前):

  • Y - 年
  • M - 月
  • W - 周
  • D - 天

時(shí)間部分 (在 T 之后):

  • H - 小時(shí)
  • M - 分鐘
  • S - 秒 (可以包含小數(shù),使用 ., 分隔,例如 PT30.5S 是 30.5 秒)

重要提示: 對(duì)于 Duration 類(lèi)型,它主要用于衡量精確的時(shí)間段,而不是用于基于日歷的、不精確的時(shí)間段。因此,在解析時(shí),年(Y)月(M) 會(huì)被忽略(一個(gè)月的天數(shù)不固定,無(wú)法精確轉(zhuǎn)換為 Duration)。周(W)天(D) 則會(huì)被正常轉(zhuǎn)換(1天=24小時(shí),1周=7天)。

這意味著,雖然格式允許 YM,但在 Duration 的語(yǔ)境下,它們是沒(méi)有意義的。你應(yīng)該專(zhuān)注于使用 D, H, M, S。

實(shí)戰(zhàn)示例

讓我們看一些在 @Scheduled 中有效的配置示例:

  1. 5 秒: PT5S
  2. 30 分鐘: PT30MPT1800S
  3. 2 小時(shí): PT2H
  4. 2 小時(shí) 30 分鐘: PT2H30M
  5. 1 天: P1D (相當(dāng)于 PT24H)
  6. 1 天 6 小時(shí): P1DT6H
  7. 1.5 秒 (1500毫秒): PT1.5S
  8. 從配置文件讀取:
    • application.properties:
      my.task.rate=PT10S
      my.task.delay=P1DT12H
      
    • Java Code:
      @Scheduled(fixedRateString = "${my.task.rate}", initialDelayString = "${my.task.delay}")
      public void doScheduledTask() {
          // 應(yīng)用啟動(dòng)后,先延遲 1天半 (36小時(shí)),然后每10秒執(zhí)行一次
      }
      

常見(jiàn)錯(cuò)誤與陷阱

  1. 忘記 T 分隔符

    • 錯(cuò)誤: P1H30M (試圖在日期部分指定小時(shí))
    • 正確: PT1H30M (必須用 T 引入時(shí)間部分)
  2. 使用 YM

    • 無(wú)效: P1M (期望是1個(gè)月,但實(shí)際會(huì)被解析為 0)
    • 無(wú)效: P1Y1M (年份和月份都會(huì)被忽略,解析結(jié)果也是 0)
    • 如果需要“大約一個(gè)月”這種基于日歷的概念,Duration 不是正確的工具,應(yīng)考慮 Cron 表達(dá)式。
  3. 負(fù)值: 格式支持負(fù)值(-PT5S),但這在調(diào)度場(chǎng)景中沒(méi)有意義,會(huì)導(dǎo)致異常。

總結(jié)

java.time.Duration 的 ISO-8601 格式與 Spring 的 @Scheduled 注解結(jié)合使用,極大地提升了配置的可讀性和可維護(hù)性。

記住這個(gè)口訣:先寫(xiě) P,要時(shí)間再加 T,忽略 Y 和 M,D/H/M/S 放心用。

到此這篇關(guān)于Spring定時(shí)任務(wù)之fixedRateString的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Spring定時(shí)任務(wù)fixedRateString內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自動(dòng)裝配原理及使用說(shuō)明

    SpringBoot自動(dòng)裝配原理及使用說(shuō)明

    SpringBoot自動(dòng)裝配是基于注解編程和約定優(yōu)于配置的思想,通過(guò)@EnableAutoConfiguration注解自動(dòng)將其他組件中的Bean裝載到IoC容器中,減少了XML配置
    2025-11-11
  • Java中關(guān)于Null的9個(gè)解釋(Java Null詳解)

    Java中關(guān)于Null的9個(gè)解釋(Java Null詳解)

    這篇文章主要介紹了Java中關(guān)于Null的9個(gè)解釋(Java Null詳解),本文詳細(xì)講解了Java中Null的9個(gè)相關(guān)知識(shí),需要的朋友可以參考下
    2015-01-01
  • SpringBoot從繁至簡(jiǎn)的框架基礎(chǔ)教程

    SpringBoot從繁至簡(jiǎn)的框架基礎(chǔ)教程

    Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。該框架使用了特定的方式來(lái)進(jìn)行配置,從而使開(kāi)發(fā)人員不再需要定義樣板化的配置
    2022-10-10
  • JUC中Future及CompletableFuture的用法與說(shuō)明

    JUC中Future及CompletableFuture的用法與說(shuō)明

    本文介紹了Future接口及其實(shí)現(xiàn)類(lèi)FutureTask的使用方法,指出了其阻塞和CPU空轉(zhuǎn)問(wèn)題,為了解決這些問(wèn)題,介紹了CompletableFuture的異步任務(wù)編排,可以自動(dòng)回調(diào)異步任務(wù)結(jié)束時(shí)的方法,解決了阻塞和輪詢(xún)問(wèn)題,同時(shí)提供了鏈?zhǔn)秸{(diào)用、函數(shù)式編程等等提高編程效率
    2026-04-04
  • SpringCloud高可用配置中心Config詳解

    SpringCloud高可用配置中心Config詳解

    Spring Cloud Config 是一個(gè)解決分布式系統(tǒng)的配置管理方案,它包含了 server 和 client 兩個(gè)部分,這篇文章主要介紹了SpringCloud之配置中心Config(高可用),需要的朋友可以參考下
    2022-04-04
  • SpringBoot生成PDF的五種實(shí)現(xiàn)方法總結(jié)

    SpringBoot生成PDF的五種實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了SpringBoot生成PDF的五種實(shí)現(xiàn)方法,在開(kāi)發(fā)中經(jīng)常會(huì)遇到需要進(jìn)行對(duì)一些數(shù)據(jù)進(jìn)行動(dòng)態(tài)導(dǎo)出PDF文件,然后讓用戶(hù)自己選擇是否需要打印出來(lái),這篇文章我們來(lái)介紹五種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-10-10
  • mybatis createcriteria和or的區(qū)別說(shuō)明

    mybatis createcriteria和or的區(qū)別說(shuō)明

    這篇文章主要介紹了mybatis createcriteria和or的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類(lèi)示例

    Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類(lèi)示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類(lèi),結(jié)合實(shí)例形式分析了java對(duì)文件的進(jìn)行zip壓縮及解壓縮的具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • Java如何獲取靜態(tài)資源文件路徑

    Java如何獲取靜態(tài)資源文件路徑

    這篇文章主要介紹了Java如何獲取靜態(tài)資源文件路徑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Logback的使用及如何配置

    Logback的使用及如何配置

    這篇文章主要介紹了Logback的使用及如何配置,幫助大家更好的理解和學(xué)習(xí)使用Logback,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

徐水县| 海丰县| 乐至县| 上思县| 定兴县| 舞阳县| 宝鸡市| 天长市| 田阳县| 南投市| 永康市| 金坛市| 德安县| 无为县| 兖州市| 读书| 阳泉市| 吴江市| 临西县| 阳城县| 唐山市| 普洱| 岳普湖县| 京山县| 新源县| 乌苏市| 宁南县| 安徽省| 东乌| 禄劝| 富平县| 宿州市| 太白县| 定结县| 乌苏市| 荣成市| 棋牌| 德化县| 舟曲县| 科尔| 铜鼓县|