在Spring Boot中设置定时任务时,可以使用注解@Scheduled。@Scheduled注解可以用于标记一个方法,表示该方法需要定时执行。该注解提供了多种参数用于设置定时任务的执行时间和频率。
@Scheduled中的参数解释:
- fixedDelay:间隔时间,表示多少毫秒之后执行。
- fixedRate:频率,表示每隔多少毫秒执行一次。如果任务执行时间超过了指定的频率,则会等待任务执行完毕后再执行下一次任务。
- initialDelay:初始延迟时间,表示在应用启动后多久开始执行定时任务,单位为毫秒。默认为0。
- cron:用于设置高度定制化的执行时间。支持Cron表达式,例如0 * * * * ?表示每分钟执行一次。
以下是代码示例:
- 每3秒执行一次任务:
@Scheduled(fixedDelay = 3000)
public void task() {
// todo
}
- 每隔5秒执行一次任务:
@Scheduled(fixedRate = 5000)
public void task() {
// todo
}
- 延迟2秒后开始执行任务:
@Scheduled(initialDelay = 2000)
public void task() {
// todo
}
- 使用Cron表达式每天凌晨2点执行任务:
@Scheduled(cron = "0 0 2 * * ?")
public void task() {
// todo
}
cron时间表达式:
cron表达式是一种时间表达式,可以用于表示基于时间的任务调度。它由6个时间部分组成,分别表示秒、分、时、日期、月份和星期,在不同的位置上使用不同的符号来表示取值范围或取值。
下面是一个cron表达式的格式: 秒 分 时 日 月 周 计划执行的命令或脚本
常用的时间符号有以下几种:
- 星号(*): 表示所有值,例如在小时的位置上设置星号就表示每个小时都会执行。
- 逗号(,): 表示枚举值,多个值之间用逗号隔开。
- 中横线(-): 表示范围,例如在小时的位置上设置为 5-10 就表示 从5到10小时都会被执行。
- 斜杠(/): 表示步长,例如在小时的位置上设置为 */2 就表示每隔2小时执行一次。
示例:
1.每天凌晨1点执行定时任务:
0 0 1 * * ?
2.每隔30分钟执行一次定时任务:
0 0/30 * * * ?
3.在工作日上午9点到下午5点之间,每隔2分钟执行一次定时任务:
0 0/2 9-17 * * MON-FRI
4.每周日晚上10点执行定时任务:
0 0 22 * * SUN
5.每个月最后一天的晚上11点执行定时任务:
0 0 23 L * ?
6.每个季度的第一个月的第一天早上6点执行定时任务:
0 0 6 1 JAN,APR,JUL,OCT ?
7.每天早上6点到晚上10点之间,每小时5分钟执行一次定时任务:
0 5 6-22/1 * * ?
注:以上示例中,问号(?)表示不指定具体值,星号(*)表示任意值。具体每个元素的定义可查阅相关文档。