概述
在开发过程中经常要用到定时任务,来执行一些特定程序。而 Java(Spring) 可以方便的使用 cron 表达式来实现定时任务。
本文将介绍 cron 表达式,并且对常用的定时任务场景,给出对应的 cron 表达式,相信能为你节省一些资料查找的时间。
CRON表达式简介
CRON表达式是一个字符串,在 Java(Spring) 中包含6个由空格分隔的字段,表示一组时间,通常作为执行某个程序的时间表。
以 Java(Spring) 为例说明:
* * * * * *
上面的表达式有6个字段,从第1个到第6个字段,分别表示:秒、分钟、小时、Day of month、月份、Day of week。
| 字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
|---|---|---|---|---|
| 秒 | 是 | 0-59 | *,- | |
| 分钟 | 是 | 0-59 | *,- | |
| 小时 | 是 | 0-23 | *,- | |
| Day of month | 是 | 1-31 | *,-? | |
| 月份 | 是 | 1-12 | *,- | |
| Day of week | 是 | 0-7 | *,-? | 0和7为周日 |
逗号 用于分隔列表。例如,在 Day of week 字段中,1,3,6 表示周一、周三和周六。
连字符 定义范围。例如,在 Day of month 字段中,15-20 表示15号至20号期间的天,包含15号和20号。
常见场景
-
每15分钟执行一次
0 0/15 * * * ? -
每天凌晨2点执行一次
0 0 2 * * ? -
每天上午10点和晚上10点分别执行一次
0 0 10,22 * * ? -
每周星期天23点59分执行一次
0 59 23 * * 7 -
每月最后一天的23点执行一次
0 0 18 28-31 * ?
一个月最少有 28 天,最多 31 天,所以天数那一项填的是 28-31。
如果一个月有31天,上面的表达式会导致 28,29,30,31号都会执行一次,所以还需要结合下面的代码来保证每个月只执行一次,
@Scheduled(cron = "0 0 18 28-31 * ?")
public void doAtLastDayOfMonth() {
final Calendar calendar = Calendar.getInstance();
if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
// do something
}
}
关注我的技术公众号,每周都有优质技术文章推送。
微信扫一扫下方二维码即可关注:

本文详细介绍了Java(Spring)中用于定时任务的CRON表达式,包括其六个字段的含义和常用特殊字符的用法。通过实例展示了如何配置CRON表达式以实现每15分钟、每天凌晨2点、每天10点和22点以及每月最后一天23点的定时任务。此外,还提到了避免每月最后一天重复执行的解决方案,并提供了关注作者技术公众号的提示。

1465

被折叠的 条评论
为什么被折叠?



