1. 程式人生 > >[譯]Java定時任務排程-Quartz Cron 排程

[譯]Java定時任務排程-Quartz Cron 排程

cron是一個歷史悠久的unix工具,它的排程能力無疑是很強的。CronTrigger類就是基於cron的排程能力。

Cron Trigger使用cron表示式,可以建立諸如“週一到週五的上午八點”或者“每個月最後一個週五的下午三點”之類的排程設定。

cron表示式很強大,但也會讓人迷惑。本文旨在為建立cron表示式解惑,在使用者不得不向論壇或者通過郵件向別人求助之前,提供些許幫助。

cron表示式是一個字串,由6-7個欄位組成,欄位中間用空格隔開。每個欄位可以包含以下值(或者值的組合):
這裡寫圖片描述

所以cron表示式可以簡單的例如:* * * * ? *

也可以複雜的諸如:0/5 14,18.3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010

特殊字元
* 表示欄位範圍內的所有值,例如分鐘欄位上的*表示每分鐘;

? 表示不指定的隨意值,通常用在一組限制中不限制的那個欄位。例如配置每個月10號(並不在意是周幾)執行的排程,在【Day of month】欄位配置10,【Day of week】欄位配置? 即可;

- 表示範圍;

/ 表示依次遞增,例如秒欄位“0/15”表示從來0秒開始,每15秒排程,即0、15、30、45秒都排程;

L 表示最後一個,在不同的欄位上有不同的含義。例如在【Day of month】上的L表示每個自然月的最後一天;在【Day of week】上如果單獨使用,表示週日,但是如果用在另一個值之後,例如6L,則表示每個月的最後一個週六;也可以在L的基礎上設定一個偏移量,例如L-3在【Day of month】就表示每個月的倒數第三天。使用L的時候,儘量不用要列舉值、範圍值,不然會出現意想不到的結果;

W 表示工作日,表示離指定日期最近的一個工作日。例如“15W”在【Day of month】表示離15號最近的一個工作日,如果15號是工作日,那麼就是15號,如果15號是週六,那麼15W就會取值14,如果15號是週日,那麼15W就會取值16。但這裡有一個例外,就是這裡的浮動不會跨月,例如1號是週六,那麼1W就不會取值上個月的最後一天,而是會在當月取值3號;

# 表示每個月的第幾個周幾。例如“6#3”表示第三個週五(注意,週日是每週的第一天,所以6表示週五)。當然如果配置5#,而沒有第五個周幾,那麼排程永遠也不會啟動的;

這裡有一些例子:
這裡寫圖片描述