Spring调度注解

2023/05/11

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标注该方法:


@Service
public class VehicleService {

    @Async
    public void repairCar() {
    }
}

如果我们将此注解应用于一个类上,那么类中的所有方法都将被异步调用。

请注意,我们需要使用@EnableAsync或XML配置启用此注解的异步调用。

有关@Async的更多信息可以在这篇文章中找到。

5. @Scheduled

如果我们需要一个方法定期执行,我们可以使用这个注解

@Component
public class Driver {

    @Scheduled(fixedRate = 10000)
    public void checkVehicle() {
    }
}

我们可以使用它以固定的时间间隔执行一个方法,或者也可以使用类似cron表达式对其进行调整。

@Scheduled利用了Java 8的重复注解特性,这意味着我们可以用它多次标记一个方法:

@Component
public class Driver {

    @Scheduled(fixedRate = 10000)
    @Scheduled(cron = "0 * * * * MON-FRI")
    public void checkVehicle() {
    }
}

请注意,使用@Scheduled注解标注的方法应该具有void返回类型。

此外,我们必须通过@EnableScheduling或XML配置启用该注解才能使用。

有关调度的更多信息,请阅读本文

6. @Schedules

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

@Component
public class Driver {

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

请注意,从Java 8开始,我们可以通过上述重复注解功能实现相同的功能。

7. 总结

在本文中,我们介绍了最常见的Spring调度注解。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章