Spring 调度注解

1. 概述

当单线程执行任务不能满足需求时,我们可以使用org.springframework.scheduling.annotation包的注解。

在这个快速教程中,我们将探索Spring调度注解。

2. @EnableAsync

通过这个注释,我们可以在Spring中启用异步功能。

我们必须使用@Configuration:

@Configuration
@EnableAsync
class VehicleFactoryConfig {}

现在,我们已经启用了异步调用,我们可以使用@Async来定义支持它的方法。

3. @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注释的方法应该有一个空返回类型。

此外,我们必须使这个注释的调度能够与@EnableScheduling或XML配置一起工作。

6. @Schedules

我们可以使用这个注释来指定多个@Scheduled规则:

@Schedules({
@Scheduled(fixedRate = 10000),
@Scheduled(cron = "0 * * * * MON-FRI")
})
void checkVehicle() {
  // ...
}

注意,自从Java 8以来,我们可以通过上面描述的重复注释功能实现相同的功能。

7. 结论

在本文中,我们概述了最常见的Spring调度注释。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!