<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 2.4 全新Cron表達(dá)式處理機(jī)制

          共 1970字,需瀏覽 4分鐘

           ·

          2020-11-17 05:37

          說(shuō)起 cron 表達(dá)式大家一定不陌生,我們常用來(lái)作為定時(shí)任務(wù)執(zhí)行策略規(guī)則。在 Spring Boot 框架中 cron 表達(dá)式主要配合 @Scheduled 注解在應(yīng)用程序中使用。在 Spring Boot 2.4 (既 Spring 5.3)以后,引入了 CronExpression 表達(dá)式處理器來(lái)替代原有的 CronSequenceGenerator。

          為什么要替代原有的 CronSequenceGenerator ? 此處理器是基于 java.util.Calendar局限性比較大,無(wú)法完成last day of month 語(yǔ)義。

          • 例如利用CronExpression 計(jì)算表達(dá)式下次執(zhí)行時(shí)間
          ??LocalDateTime?now?=?LocalDateTime.now();
          ??System.out.println("當(dāng)前運(yùn)行時(shí)間:?"?+?now);

          ??//?每小時(shí)執(zhí)行一次
          ??CronExpression?expression1?=?CronExpression.parse("0?0?0/1?*?*?*");
          ??LocalDateTime?nextTime?=?expression1.next(now);
          ??System.out.println("每小時(shí)執(zhí)行一次?->?下次執(zhí)行時(shí)間:?"?+?nextTime);

          ???//?每小時(shí)第十分執(zhí)行一次
          ??CronExpression?expression2?=?CronExpression.parse("0?10?0/1?*?*?*");
          ??LocalDateTime?nextTime2?=?expression2.next(now);
          ??System.out.println("每小時(shí)第十分執(zhí)行?->?下次執(zhí)行時(shí)間:?"?+?nextTime2);
          • 執(zhí)行結(jié)果
          當(dāng)前運(yùn)行時(shí)間:?2020-11-14T23:04:46.302739
          每小時(shí)執(zhí)行一次?->???下次執(zhí)行時(shí)間:?2020-11-15T00:00
          每小時(shí)第十分執(zhí)行?->?下次執(zhí)行時(shí)間:?2020-11-14T23:10

          新增常用表達(dá)式通用宏

          對(duì)于非開發(fā)人員來(lái)說(shuō) cron 表達(dá)式并不容易理解,所以很難在出現(xiàn)錯(cuò)誤的時(shí)候進(jìn)行修復(fù)。比如筆者會(huì)把 cron 表達(dá)式 在在線網(wǎng)站[1] 模擬運(yùn)行一下,確認(rèn)執(zhí)行過(guò)程方便排查問(wèn)題。

          為了提高可讀性,Spring Boot 現(xiàn)在支持以下代表常用表達(dá)式的宏。可以使用這些宏而不是六位的表達(dá)式,因此:

          @Scheduled(cron?=?"@hourly")。

          相當(dāng)于

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

          其他常用宏命令

          cron 表達(dá)式含義
          @yearly0 0 0 1 1 *每年執(zhí)行一次
          @monthly0 0 0 1 * *每月執(zhí)行一次
          @weekly0 0 0 * * 0每周執(zhí)行一次
          @daily 或@annually0 0 0 * * *每天執(zhí)行一次
          @hourly0 0 * * * *每小時(shí)執(zhí)行一次

          增強(qiáng)原有表達(dá)式 最后幾天

          ???????每周的第幾天
          ???????????|
          ???????????∨
          ?*?*?*?*?*?*
          ???????^
          ???????|
          ????每月的第幾天

          如上其中的 每月的第幾天每周的第幾天 支持 最后幾天 (L) 的語(yǔ)義 例如:

          0?0?0?L?*?*???每月最后一天的零時(shí)

          0?0?0?L-3?*?*???每月最后第三天的零時(shí)??(L-d?格式)

          0 0 0 L-3 * *???每月最后第三天的零時(shí)

          0?0?0?*?*?5L????每月最后的星期五零時(shí)??(dL?格式)

          0?0?0?*?*?FRIL??每月最后的星期五零時(shí)??(?(星期一星期天的英文縮寫)L?格式)

          增強(qiáng)原有表達(dá)式 工作日

          ?*?*?*?*?*?*
          ???????^
          ???????|
          ????每月的第幾天

          如上其中的 每月的第幾天 支持 工作日 (W)的語(yǔ)義 例如:

          0?0?0?1W?*?*?每月的第一個(gè)工作日零時(shí)
          0?0?0?LW?*?*?每月的最后一個(gè)工作日零時(shí)

          增強(qiáng)原有表達(dá)式 幾周的星期幾

          ???????每周的第幾天
          ???????????|
          ???????????∨
          ?*?*?*?*?*?*

          如上其中的 每周的第幾天 支持 每月第幾周的第幾天語(yǔ)義 例如

          0?0?0???*?5#2?????每月第二周的星期五零時(shí)

          0?0?0???*?MON#1????每月周一的星期一零時(shí)

          參考資料

          [1]

          在線網(wǎng)站: https://cron.qqe2.com/


          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品麻豆三级三级视频 | 懂色AV成人 | 老骚逼网站 | 插逼视频免费看 | 久久青青操 |