spring schedule與quartz的cron

    近期在使用cron表達(dá)式,同時(shí)使用quartz和schedule的CronExpression,發(fā)現(xiàn)兩個(gè)cron處理類獲取下次的執(zhí)行時(shí)間居然是不一致的,記錄
一下。

1、crontab表達(dá)式

crontab表達(dá)式是一個(gè)設(shè)置周期性被執(zhí)行的指令,是一種很常用的技術(shù),通過設(shè)置crontab周期性的去執(zhí)行或者處理你所需要的命令,包含五到七位的字段來表達(dá)一個(gè)時(shí)間。

字段 是否必填 允許值 允許特殊字符 備注
Seconds 0–59 *``,``- 標(biāo)準(zhǔn)實(shí)現(xiàn)不支持此字段。
Minutes 0–59 *``,``-
Hours 0–23 *``,``-
Day of month 1–31 *``,``-``?``L``W ?``L``W只有部分軟件實(shí)現(xiàn)了
Month 1–12 or JAN–DEC *``,``-
Day of week 0–7 or SUN–SAT *``,``-``?``L``# ?``L``#只有部分軟件實(shí)現(xiàn)了 Linux和Spring的允許值為0-7,0和7為周日 Quartz的允許值為1-7,1為周日
Year 1970–2099 *``,``- 標(biāo)準(zhǔn)實(shí)現(xiàn)不支持此字段。

五位cron表達(dá)式就是沒有秒和年

**0 0 * * *** 代表每天的凌晨

六位cron表達(dá)式就是沒有年

0 0 18 25 * ? 代表每個(gè)月的25號(hào)的下午6點(diǎn)

七位cron表達(dá)式則都包含

0 0 18 25 * ? 2021代表2021年每個(gè)月的25號(hào)下午六點(diǎn)

符號(hào)具體使用就如下圖所示,以上就是cron表達(dá)式具體解釋和基本用法

2、spring schedule和quartz的CronExpression差異

在使用兩者CronExpression發(fā)現(xiàn)同一個(gè)表達(dá)式的下次時(shí)間居然有一些差異,例如下圖的cron表達(dá)式本意是想指定周一、周二、周五的每個(gè)小時(shí)每隔五分鐘就執(zhí)行一次,但是發(fā)現(xiàn)兩者下次的執(zhí)行時(shí)間的天不一致,通過quartz得到的下次執(zhí)行時(shí)間是星期天去執(zhí)行,而spring的代表著是星期一執(zhí)行。

quartz是將數(shù)字1代表星期天2代表星期一,month月份位置的數(shù)字也是一樣的0代表一月

而spring CronExpression的數(shù)字1代表的就是星期一或者一月份,它是將cron表達(dá)式的幾位單獨(dú)拆開然后還去將每個(gè)位置的日期進(jìn)行格式轉(zhuǎn)換。

如果crontab有英文代表的話它會(huì)將英文都轉(zhuǎn)成數(shù)字表示如果本身是數(shù)字那就不會(huì)轉(zhuǎn)換,如果是MON,TUE,FRI英文那么會(huì)轉(zhuǎn)成1,2,5。

同時(shí)cron表達(dá)式不能同時(shí)指定dayofweek和dayofmonth這樣會(huì)導(dǎo)致cron不知道具體哪天去執(zhí)行,導(dǎo)致crontab不合法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容