@Scheduled 是 Spring 框架提供的注解,用于声明一个方法按照一定的计划执行,即所谓的定时任务。这个注解可以被用于任何 Spring 管理的 Bean 上的方法,使得这个方法成为一个定时任务。下面是 @Scheduled
注解的一些详细说明和使用方式:
基本使用
要使用 @Scheduled 注解,首先需要在 Spring 配置中开启定时任务的支持,通常在 Spring Boot 应用的主类上添加 @EnableScheduling
注解:
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
注解参数
@Scheduled 注解支持几个参数,用于定义任务的执行计划:
- cron:使用 cron 表达式来定义执行计划。
- fixedRate:任务每次执行完毕后,等待指定的时间再执行下一次。
- fixedDelay:任务每次执行完毕后,等待指定的时间再执行下一次,但与
fixedRate
不同的是,fixedDelay
会等待上一次任务执行完毕后再开始计时。 - initialDelay:任务开始执行前的初始延迟时间。
- zone:指定时区。
使用 Cron 表达式
Cron 表达式是一个字符串,格式如 second minute hour day month day-of-week year
。例如,0 0/30 * * * ?
表示每半小时执行一次。
@Scheduled(cron = "0 0/30 * * * ?")
public void executeTaskWithCron() {
// 任务代码
}
使用 fixedRate
fixedRate参数指定了两次任务执行之间的固定时间间隔(以毫秒为单位)。
@Scheduled(fixedRate = 5000)
public void executeTaskWithFixedRate() {
// 任务代码
}
使用 fixedDelay
fixedDelay参数指定了任务执行完毕后,等待指定的时间再执行下一次任务。
@Scheduled(fixedDelay = 5000)
public void executeTaskWithFixedDelay() {
// 任务代码
}
使用 initialDelay
initialDelay参数指定了任务开始执行前的初始延迟时间(以毫秒为单位)。
@Scheduled(initialDelay = 1000, fixedRate = 5000)
public void executeTaskWithInitialDelay() {
// 任务代码
}
配置时区
zone 参数允许你指定一个时区,这样定时任务会根据指定的时区来执行。
@Scheduled(cron = "0 0/30 * * * ?", zone = "GMT+8")
public void executeTaskWithZone() {
// 任务代码
}
错误处理
默认情况下,如果一个定时任务抛出异常,Spring 会尝试重新执行它。你可以通过设置 @Scheduled
注解的 shouldRetryOnFailure
属性为 false
来改变这个行为,使得任务在失败后不再重试。
@Scheduled(cron = "0 0/30 * * * ?", shouldRetryOnFailure = false)
public void executeTaskNoRetry() {
// 任务代码
}
注意事项
- 使用
@Scheduled
注解的方法必须是public
的。 - 如果你的方法需要参数,那么它必须接受一个
java.util.Date
参数,这将被 Spring 自动填充为任务执行时的日期。 - 定时任务默认是非并发的,即同一时间只有一个任务在执行。如果你需要并发执行,可以使用
@Async
注解,但这需要额外的配置。 - 定时任务的执行计划是基于应用服务器的系统时钟。如果系统时钟被修改,可能会影响任务的执行计划。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » @Scheduled(定时任务)
发表评论 取消回复