知識庫 / Spring RSS 訂閱

Linux Cron 語法與 Spring 之間的區別

Spring
HongKong
4
12:52 PM · Dec 06 ,2025

1. 概述

Cron 表達式使我們能夠定期在特定日期和時間安排任務執行。自它在 Unix 系統中引入以來,其他基於 Unix 的操作系統和軟件庫(包括 Spring Framework)也採用了這種任務安排的方法。

在本快速教程中,我們將探討 Unix 操作系統和 Spring Framework 中 Cron 表達式之間的差異。

2. Unix Cron

在大多數基於 Unix 的系統中,crontab (任務調度表) 有五個字段:分鐘 (0-59), 小時 (0-23), 月份中的日期 (1-31), 月份 (1-12 或名稱), 以及星期幾 (0-7 或名稱)

我們可以將一些特殊值放在每個字段中,例如星號 (*)。

5 0 * * *

任務將在每天午夜後 5 分鐘執行。 還可以使用一系列值:

5 0-5 * * *

調度器將在午夜後 5 分鐘執行任務,並且每天在 1 點、2 點、3 點、4 點和 5 點的 5 分鐘後也會執行。

或者,我們可以使用以下值列表:

5 0,3 * * *

現在,調度器會在每月的午夜和下午三點後每五分鐘執行任務。原始的Cron表達式提供了比我們所討論的更多功能。

然而,它有一個主要限制:由於它沒有專門的秒級字段,因此無法按秒級安排任務。

讓我們看看Spring如何解決這個問題。

3. Spring 定時器

為了在 Spring 中安排週期性後台任務,我們通常會將 Cron 表達式傳遞給 <em >@Scheduled</em> 註解。

與基於 Unix 的系統中的 Cron 表達式不同,<em >@Scheduled</em> 註解中的 Cron 表達式包含六個以空格分隔的字段:秒、分、時、日、月和星期幾。

例如,要運行一個每十秒執行一次的任務,我們可以這樣做:

*/10 * * * * *

此外,為了每天早上8點到10點之間每20秒執行一次任務,請執行以下操作:

*/20 * 8-10 * * *

如上例所示,第一個字段代表表達式的第二部分。這是兩種實現之間的差異。 儘管第二字段存在差異,Spring 仍然支持 Cron 的許多功能,例如範圍數字或列表。

從實現角度來看,CronSequenceGenerator 類負責解析 Spring 中的 Cron 表達式。

4. 結論

在本教程中,我們對比了 Spring 和大多數基於 Unix 的系統中的 Cron 實現差異。在過程中,我們還看到了幾個示例。

為了查看更多 Cron 表達式示例,強烈建議您查看我們的《Cron 表達式指南》。此外,查看 CronSequenceGenerator 類源代碼,可以幫助我們更好地理解 Spring 如何實現此功能。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.