@Scheduled注解各參數(shù)詳解

@Scheduled注解的使用這里不詳細(xì)說明斩个,直接對8個(gè)參數(shù)進(jìn)行講解书妻。

參數(shù)詳解

1. cron

該參數(shù)接收一個(gè)cron表達(dá)式获高,cron表達(dá)式是一個(gè)字符串哈肖,字符串以5或6個(gè)空格隔開,分開共6或7個(gè)域念秧,每一個(gè)域代表一個(gè)含義淤井。

cron表達(dá)式語法
[秒] [分] [小時(shí)] [日] [月] [周] [年]

注:[年]不是必須的域,可以省略[年],則一共6個(gè)域

序號 說明 必填 允許填寫的值 允許的通配符
1 0-59 , - * /
2 0-59 , - * /
3 時(shí) 0-23 , - * /
4 1-31 , - * ? / L W
5 1-12 / JAN-DEC , - * /
6 1-7 or SUN-SAT , - * ? / L #
7 1970-2099 , - * /
通配符說明:
  • * 表示所有值币狠。 例如:在分的字段上設(shè)置 *,表示每一分鐘都會觸發(fā)游两。
  • ? 表示不指定值。使用的場景為不需要關(guān)心當(dāng)前設(shè)置這個(gè)字段的值漩绵。例如:要在每月的10號觸發(fā)一個(gè)操作贱案,但不關(guān)心是周幾,所以需要周位置的那個(gè)字段設(shè)置為”?” 具體設(shè)置為 0 0 0 10 * ?
  • - 表示區(qū)間止吐。例如 在小時(shí)上設(shè)置 “10-12”,表示 10,11,12點(diǎn)都會觸發(fā)宝踪。
  • , 表示指定多個(gè)值,例如在周字段上設(shè)置 “MON,WED,FRI” 表示周一碍扔,周三和周五觸發(fā)
  • / 用于遞增觸發(fā)肴沫。如在秒上面設(shè)置”5/15” 表示從5秒開始,每增15秒觸發(fā)(5,20,35,50)蕴忆。 在日字段上設(shè)置’1/3’所示每月1號開始,每隔三天觸發(fā)一次悲幅。
  • L 表示最后的意思套鹅。在日字段設(shè)置上,表示當(dāng)月的最后一天(依據(jù)當(dāng)前月份汰具,如果是二月還會依據(jù)是否是潤年[leap]), 在周字段上表示星期六卓鹿,相當(dāng)于”7”或”SAT”。如果在”L”前加上數(shù)字留荔,則表示該數(shù)據(jù)的最后一個(gè)吟孙。例如在周字段上設(shè)置”6L”這樣的格式,則表示“本月最后一個(gè)星期五”
  • W 表示離指定日期的最近那個(gè)工作日(周一至周五). 例如在日字段上置”15W”,表示離每月15號最近的那個(gè)工作日觸發(fā)聚蝶。如果15號正好是周六杰妓,則找最近的周五(14號)觸發(fā), 如果15號是周未,則找最近的下周一(16號)觸發(fā).如果15號正好在工作日(周一至周五)碘勉,則就在該天觸發(fā)巷挥。如果指定格式為 “1W”,它則表示每月1號往后最近的工作日觸發(fā)。如果1號正是周六验靡,則將在3號下周一觸發(fā)倍宾。(注,”W”前只能設(shè)置具體的數(shù)字,不允許區(qū)間”-“)胜嗓。
  • # 序號(表示每月的第幾個(gè)周幾)高职,例如在周字段上設(shè)置”6#3”表示在每月的第三個(gè)周六.注意如果指定”#5”,正好第五周沒有周六,則不會觸發(fā)該配置(用在母親節(jié)和父親節(jié)再合適不過了) 辞州;小提示:’L’和 ‘W’可以一組合使用怔锌。如果在日字段上設(shè)置”LW”,則表示在本月的最后一個(gè)工作日觸發(fā);周字段的設(shè)置,若使用英文字母是不區(qū)分大小寫的产禾,即MON與mon相同排作。
示例

每隔5秒執(zhí)行一次:*/5 * * * * ?

每隔1分鐘執(zhí)行一次:0 */1 * * * ?

每天23點(diǎn)執(zhí)行一次:0 0 23 * * ?

每天凌晨1點(diǎn)執(zhí)行一次:0 0 1 * * ?

每月1號凌晨1點(diǎn)執(zhí)行一次:0 0 1 1 * ?

每月最后一天23點(diǎn)執(zhí)行一次:0 0 23 L * ?

每周星期六凌晨1點(diǎn)實(shí)行一次:0 0 1 ? * L

在26分、29分亚情、33分執(zhí)行一次:0 26,29,33 * * * ?

每天的0點(diǎn)妄痪、13點(diǎn)、18點(diǎn)楞件、21點(diǎn)都執(zhí)行一次:0 0 0,13,18,21 * * ?

cron表達(dá)式使用占位符

另外衫生,cron屬性接收的cron表達(dá)式支持占位符。eg:

配置文件:

time:
  cron: */5 * * * * *
  interval: 5

每5秒執(zhí)行一次:

    @Scheduled(cron="${time.cron}")
    void testPlaceholder1() {
        System.out.println("Execute at " + System.currentTimeMillis());
    }

    @Scheduled(cron="*/${time.interval} * * * * *")
    void testPlaceholder2() {
        System.out.println("Execute at " + System.currentTimeMillis());
    }

2. zone

時(shí)區(qū)土浸,接收一個(gè)java.util.TimeZone#ID罪针。cron表達(dá)式會基于該時(shí)區(qū)解析。默認(rèn)是一個(gè)空字符串黄伊,即取服務(wù)器所在地的時(shí)區(qū)泪酱。比如我們一般使用的時(shí)區(qū)Asia/Shanghai。該字段我們一般留空还最。

3. fixedDelay

上一次執(zhí)行完畢時(shí)間點(diǎn)之后多長時(shí)間再執(zhí)行墓阀。如:

@Scheduled(fixedDelay = 5000) //上一次執(zhí)行完畢時(shí)間點(diǎn)之后5秒再執(zhí)行

4. fixedDelayString

3. fixedDelay 意思相同,只是使用字符串的形式拓轻。唯一不同的是支持占位符斯撮。如:

@Scheduled(fixedDelayString = "5000") //上一次執(zhí)行完畢時(shí)間點(diǎn)之后5秒再執(zhí)行

占位符的使用(配置文件中有配置:time.fixedDelay=5000):

    @Scheduled(fixedDelayString = "${time.fixedDelay}")
    void testFixedDelayString() {
        System.out.println("Execute at " + System.currentTimeMillis());
    }

運(yùn)行結(jié)果:


占位符的使用

5. fixedRate

上一次開始執(zhí)行時(shí)間點(diǎn)之后多長時(shí)間再執(zhí)行。如:

@Scheduled(fixedRate = 5000) //上一次開始執(zhí)行時(shí)間點(diǎn)之后5秒再執(zhí)行

6. fixedRateString

5. fixedRate 意思相同扶叉,只是使用字符串的形式勿锅。唯一不同的是支持占位符。

7. initialDelay

第一次延遲多長時(shí)間后再執(zhí)行枣氧。如:

@Scheduled(initialDelay=1000, fixedRate=5000) //第一次延遲1秒后執(zhí)行溢十,之后按fixedRate的規(guī)則每5秒執(zhí)行一次

8. initialDelayString

7. initialDelay 意思相同,只是使用字符串的形式作瞄。唯一不同的是支持占位符茶宵。

That's all ! Thanks for reading.

附:

截至spring-context-4.3.14.RELEASE的源碼

/**
 * An annotation that marks a method to be scheduled. Exactly one of
 * the {@link #cron()}, {@link #fixedDelay()}, or {@link #fixedRate()}
 * attributes must be specified.
 *
 * <p>The annotated method must expect no arguments. It will typically have
 * a {@code void} return type; if not, the returned value will be ignored
 * when called through the scheduler.
 *
 * <p>Processing of {@code @Scheduled} annotations is performed by
 * registering a {@link ScheduledAnnotationBeanPostProcessor}. This can be
 * done manually or, more conveniently, through the {@code <task:annotation-driven/>}
 * element or @{@link EnableScheduling} annotation.
 *
 * <p>This annotation may be used as a <em>meta-annotation</em> to create custom
 * <em>composed annotations</em> with attribute overrides.
 *
 * @author Mark Fisher
 * @author Dave Syer
 * @author Chris Beams
 * @since 3.0
 * @see EnableScheduling
 * @see ScheduledAnnotationBeanPostProcessor
 * @see Schedules
 */
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {

    /**
     * A cron-like expression, extending the usual UN*X definition to include
     * triggers on the second as well as minute, hour, day of month, month
     * and day of week.  e.g. {@code "0 * * * * MON-FRI"} means once per minute on
     * weekdays (at the top of the minute - the 0th second).
     * @return an expression that can be parsed to a cron schedule
     * @see org.springframework.scheduling.support.CronSequenceGenerator
     */
    String cron() default "";

    /**
     * A time zone for which the cron expression will be resolved. By default, this
     * attribute is the empty String (i.e. the server's local time zone will be used).
     * @return a zone id accepted by {@link java.util.TimeZone#getTimeZone(String)},
     * or an empty String to indicate the server's default time zone
     * @since 4.0
     * @see org.springframework.scheduling.support.CronTrigger#CronTrigger(String, java.util.TimeZone)
     * @see java.util.TimeZone
     */
    String zone() default "";

    /**
     * Execute the annotated method with a fixed period in milliseconds between the
     * end of the last invocation and the start of the next.
     * @return the delay in milliseconds
     */
    long fixedDelay() default -1;

    /**
     * Execute the annotated method with a fixed period in milliseconds between the
     * end of the last invocation and the start of the next.
     * @return the delay in milliseconds as a String value, e.g. a placeholder
     * @since 3.2.2
     */
    String fixedDelayString() default "";

    /**
     * Execute the annotated method with a fixed period in milliseconds between
     * invocations.
     * @return the period in milliseconds
     */
    long fixedRate() default -1;

    /**
     * Execute the annotated method with a fixed period in milliseconds between
     * invocations.
     * @return the period in milliseconds as a String value, e.g. a placeholder
     * @since 3.2.2
     */
    String fixedRateString() default "";

    /**
     * Number of milliseconds to delay before the first execution of a
     * {@link #fixedRate()} or {@link #fixedDelay()} task.
     * @return the initial delay in milliseconds
     * @since 3.2
     */
    long initialDelay() default -1;
    String initialDelayString() default "";

}

相關(guān)鏈接

Spring - Quartz - cronExpression中問號(?)的解釋
在線Cron表達(dá)式生成器

推薦閱讀

Spring Cloud 進(jìn)階玩法
統(tǒng)一異常處理介紹及實(shí)戰(zhàn)
分布式鎖可以這么簡單?
Spring Cloud Stream 進(jìn)階配置——使用延遲隊(duì)列實(shí)現(xiàn)“定時(shí)關(guān)閉超時(shí)未支付訂單”
Spring Cloud Stream 進(jìn)階配置——高可用(二)——死信隊(duì)列

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宗挥,一起剝皮案震驚了整個(gè)濱河市乌庶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌契耿,老刑警劉巖瞒大,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搪桂,居然都是意外死亡透敌,警方通過查閱死者的電腦和手機(jī)盯滚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酗电,“玉大人魄藕,你說我怎么就攤上這事∧焓酰” “怎么了背率?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嫩与。 經(jīng)常有香客問我寝姿,道長,這世上最難降的妖魔是什么划滋? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任饵筑,我火速辦了婚禮,結(jié)果婚禮上处坪,老公的妹妹穿的比我還像新娘根资。我一直安慰自己,他們只是感情好同窘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布嫂冻。 她就那樣靜靜地躺著,像睡著了一般塞椎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睛低,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天案狠,我揣著相機(jī)與錄音,去河邊找鬼钱雷。 笑死骂铁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罩抗。 我是一名探鬼主播拉庵,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼套蒂!你這毒婦竟也來了钞支?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤操刀,失蹤者是張志新(化名)和其女友劉穎烁挟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骨坑,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撼嗓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片且警。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粉捻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斑芜,到底是詐尸還是另有隱情肩刃,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布押搪,位于F島的核電站树酪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏大州。R本人自食惡果不足惜续语,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厦画。 院中可真熱鬧疮茄,春花似錦、人聲如沸根暑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽排嫌。三九已至畸裳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淳地,已是汗流浹背怖糊。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颇象,地道東北人伍伤。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像遣钳,于是被迫代替她去往敵國和親扰魂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容