亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

時間部分 (在 T 之后):

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

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

這意味著,雖然格式允許 YM,但在 Duration 的語境下,它們是沒有意義的。你應該專注于使用 D, H, M, S。

實戰(zhàn)示例

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

  1. 5 秒: PT5S
  2. 30 分鐘: PT30MPT1800S
  3. 2 小時: PT2H
  4. 2 小時 30 分鐘: PT2H30M
  5. 1 天: P1D (相當于 PT24H)
  6. 1 天 6 小時: 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() {
          // 應用啟動后,先延遲 1天半 (36小時),然后每10秒執(zhí)行一次
      }
      

常見錯誤與陷阱

  1. 忘記 T 分隔符

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

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

總結(jié)

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

記住這個口訣:先寫 P,要時間再加 T,忽略 Y 和 M,D/H/M/S 放心用。

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

相關文章

  • Spring聲明式事務和@Aspect的攔截順序問題的解決

    Spring聲明式事務和@Aspect的攔截順序問題的解決

    本篇文章主要介紹了Spring聲明式事務和@Aspect的攔截順序問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 解決springmvc整合Mybatis的Log4j日志輸出問題

    解決springmvc整合Mybatis的Log4j日志輸出問題

    這篇文章主要介紹了解決springmvc整合Mybatis的Log4j日志輸出問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中double數(shù)值保留兩位小數(shù)的4種實現(xiàn)方式舉例

    Java中double數(shù)值保留兩位小數(shù)的4種實現(xiàn)方式舉例

    在Java編程中,我們經(jīng)常遇到需要對double類型的浮點數(shù)進行精確截斷或四舍五入保留兩位小數(shù)的需求,這篇文章主要給大家介紹了關于Java中double數(shù)值保留兩位小數(shù)的4種實現(xiàn)方式,需要的朋友可以參考下
    2024-07-07
  • Spring中@Autowired注解的原理詳解

    Spring中@Autowired注解的原理詳解

    這篇文章主要介紹了Spring中@Autowired注解的原理詳解,對于spring配置一個bean時,如果需要給該bean提供一些初始化參數(shù),則需要通過依賴注入方式,所謂的依賴注入就是通過spring將bean所需要的一些參數(shù)傳遞到bean實例對象的過程,需要的朋友可以參考下
    2023-11-11
  • Spring Boot使用GridFS實現(xiàn)文件的上傳和下載方式

    Spring Boot使用GridFS實現(xiàn)文件的上傳和下載方式

    這篇文章主要介紹了Spring Boot使用GridFS實現(xiàn)文件的上傳和下載方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring boot+beetl+i18n國際化處理的方法

    Spring boot+beetl+i18n國際化處理的方法

    這篇文章主要介紹了Spring boot+beetl+i18n國際化處理的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java安全之URLDNS鏈使用分析

    Java安全之URLDNS鏈使用分析

    這篇文章主要介紹了Java安全之URLDNS鏈使用分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • java.io.NotSerializableException異常的問題及解決

    java.io.NotSerializableException異常的問題及解決

    這篇文章主要介紹了java.io.NotSerializableException異常的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Struts2 文件上傳進度條的實現(xiàn)實例代碼

    Struts2 文件上傳進度條的實現(xiàn)實例代碼

    本篇文章主要介紹了Struts2 文件上傳進度條的實現(xiàn)實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • AgileBoot?項目內(nèi)統(tǒng)一的錯誤碼設計分析

    AgileBoot?項目內(nèi)統(tǒng)一的錯誤碼設計分析

    這篇文章主要為大家介紹了AgileBoot?項目內(nèi)統(tǒng)一的錯誤碼設計分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論