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