Spring 定时任务注解
1、概览
本文将带你了解 org.springframework.scheduling.annotation
包中和调度相关的注解。
2、@EnableAsync
注解用于在 Spring 中启用异步功能。
必须与 @Configuration
一起使用:
@Configuration
@EnableAsync
class VehicleFactoryConfig {}
启用了异步调用后,可以使用 @Async
来定义支持异步调用的方法。
3、@EnableScheduling
@EnableScheduling
用于启用定时任务调度。同样,必须与 @Configuration
结合使用:
@Configuration
@EnableScheduling
class VehicleFactoryConfig {}
启用了定时调度后,就可以可以使用 @Scheduled
注解来定期运行方法。
4、@Async
@Async
用于注解需要异步执行的方法。
@Async
void repairCar() {
// ...
}
如果将此注解应用于一个类,那么所有方法都将被异步调用。
注意,需要通过 @EnableAsync
或 XML 配置来启用异步调用,此注解才会生效。
5、@Scheduled
如果需要定期执行一个方法,可以使用此注解:
@Scheduled(fixedRate = 10000)
void checkVehicle() {
// ...
}
可以使用它来按固定间隔执行方法,或者可以使用类似 cron 的表达式进行微调。
@Scheduled
利用了 Java 8 的重复注解功能,这意味着可以多次使用它来标记一个方法:
@Scheduled(fixedRate = 10000)
@Scheduled(cron = "0 * * * * MON-FRI")
void checkVehicle() {
// ...
}
注意,注解为 @Scheduled
的方法返回值必须要为 viod
。
必须通过 @EnableScheduling
或 XML 配置等方式启用调度功能,才能使该注解生效。
6、@Schedules
可以使用此注解指定多个 @Scheduled
规则:
@Schedules({
@Scheduled(fixedRate = 10000),
@Scheduled(cron = "0 * * * * MON-FRI")
})
void checkVehicle() {
// ...
}
如上所述,自 Java 8 以来,可以通过重复注解的特性来实现同样的功能。
7、总结
本文介绍了 Spring 中和定时调度相关的注解,如 @EnableAsync
、@EnableScheduling
、@Async
、@Scheduled
以及 @Schedules
。还介绍了它们的使用方式。
Ref:https://www.baeldung.com/spring-scheduling-annotations