banner
RustyNail

RustyNail

coder. 【blog】https://rustynail.me 【nostr】wss://ts.relays.world/ wss://relays.world/nostr

SpringBoot的Scheduled

日程安排#

有時候需要使用定時功能來實現一些功能。例如定時發送郵件、發送推送等。

這時候需要使用Scheduled註解。

在 SpringBoot 中開啟 Schedule#

  • 首先在啟動類中加上@EnableScheduling註解。

  • 創建 ++Component++。

  • 編寫 schedule 方法並打上@Scheduled註解。

例如:

/**
 * 作者:dqn
 * 創建於2018/8/2 - 17:33
 */
@Component
public class TestSchedule {
    Logger logger = LoggerFactory.getLogger(TestSchedule.class);
    /**
     *  cron *  *  *  *  *  *
     *      秒 分 時 號 月 星期X
     *      0-59 0-59 0-24 1-31 1-12 1-7
     *      其實還有一位可以空, 年份,1970-2099
     *  定時任務,符合cron表達式的時候觸發
     */
    @Scheduled(cron = "0 * * * * *")
    public void testCommon(){
        logger.info("common "+Instant.now().toString());
    }

    /**
     * 在執行完後fixedDelay後執行
     */
    @Scheduled(fixedDelay = 1000)
    public void testFixDelay(){
        logger.info("delay "+Instant.now().toString());
    }

    /**
     * 第一次緩initDelay後執行
     * 之後在執行完後fixedDelay後執行
     */
    @Scheduled(initialDelay = 1000,fixedDelay = 1000)
    public void testInitDelay(){
        logger.info("delay "+Instant.now().toString());
    }

    /**
     * 在前一次 開始 執行後fixedRate後執行
     */
    @Scheduled(fixedRate = 2000)
    public void testRateDelay(){
        logger.info("rate "+Instant.now().toString());
    }
}

註解的一些配置#

第一類,定時任務#

第一種是定時任務,在@Scheduled中的cron值加上一個表達式,用來表示在某個時間的形式符合這個表達式時執行方法。

cron-like expression#

表達式一般是這樣的: * * * * * * *

一共 7 個位置,最後一個可以不填,也就是說 ++ 可以 ++ 只設置 6 位。

從左到右按順序是: 秒、分、時、日、月、週 X、

它們的值分別是:

  • 0-59 秒
  • 0-59 分
  • 0-23 時
  • 1-31 日
  • 1-12 月
  • 1-7 週
  • 1970-2099 年

例子#

0 * * * * ? 表示每次秒到 0 的時候觸發,即每分鐘觸發一次。

0 0 * * * ? 表示每次分到 0 的,每小時一次,也可以 * 0 * * * *

* * 3 * * ? 表示每天 3 點執行

* * 3 15 * ? 表示每個月的 15 號的 3 點執行。問號表示不確定,或者說都可以,因為星期 X是衝突的

* * 3 ? * 1 表示每週一的 3 點執行,相應的,日期是?號

* * 3-5 * * ? 表示每天的 3、4、5 點都執行, - 表示範圍(range)

同時還提供了 3,6,9 表示一個列表值,還有2/10表示從 2 開始,每次遞增 10。

延時任務#

延時有兩種,開始後延時、完成後延時

fixedDelay#

fixedDelay 表示在上一次執行後延時 XX 時間後執行

fixedRate#

fixedRate 表示在上一次開始執行就計時,在 XX 時間後執行

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。