相信大家在平时的工作中,多多少少都会用到分布式job,如Elastic-Job,来定时执行一些任务,比如扫描表,关注某些任务的状态值字段的变更, 或者刷存量数据又或者完成绩效的结算等等。cron表达式可以用来配置job的触发时间。如每天、每小时、每周或每月的特定时间执行任务。
cron表达式的组成
在Elastic-Job中,cron表达式通常由6或7个空格分隔的时间元素组成,按顺序依次为:
- 秒(0~59)
- 分钟(0~59)
- 小时(0~23)
- 日(1~31,注意月份的天数)
- 月(0~11 或 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC)
- 星期(1~7, 或 SUN,MON,TUE,WED,THU,FRI,SAT)
- 年(可选,1970~2024)
特殊字符说明
- *:表示匹配该域的任意值。
- -:表示范围。
- ,:表示列出枚举值。
- /:表示间隔时间触发(开始时间/时间间隔)。
- ?:表示不指定值,通常用于日和星期字段中的一个,以避免冲突。
- L:表示最后,是单词“last”的缩写,用于日和星期字段。
- #:表示该月第n个星期x(x#n),仅用星期域。
最佳实践
- 每隔5分钟扫一次订单表 0 0/5 * * * ?
- 每周一上午9点开会 0 0 9 ? * MON
- 每月的最后一天晚上11点生成下个月的绩效规则 0 0 23 L * ?
- 每月的10或15号上午9点发工资 0 0 9 10,15 * ?
- 每月的第一个星期一的上午9点进行上个月绩效结算 0 0 9 ? * MON#1