- 首先要启用对 @Scheduled 注释的支持,可以在 @Configuration 类中添加 @EnableScheduling ,如下:
@Configuration
@EnableAsync
@EnableScheduling
public class ScheduleConfig {
}
- 将 @Scheduled 注解添加到方法中。例如,下面的方法每5秒(5000毫秒)调用一次,有一个固定的延迟时间,这意味着该时间段是从前面每次调用的完成时间开始计算的(也就是说这个方法调用完成之后再开始等待你设置的时间,到了之后再次执行该方法):
@Scheduled(fixedDelay = 5000)
public void doSomething() {
// 需要执行的代码
}
- 默认情况下,毫秒将用作固定延迟、固定速率和初始延迟值的时间单位。如果您想使用不同的时间单位,例如秒或分,可以通过@Scheduled中的timeUnit属性进行配置。
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.SECONDS)
public void doSomething() {
// 需要执行的代码
}
- 如果需要固定速率的执行,可以在注解中使用fixedRate属性。下面的方法每5秒钟调用一次(这个方法调用之后,无需等待方法调用完成,即开始等待你设置的时间,到了之后再次执行该方法):
@Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS)
public void doSomething() {
// 需要执行的代码
}
- 对于固定延迟和固定速率任务,可以通过指明方法首次执行前的等待时间来指定初始延迟:
@Scheduled(initialDelay = 1000, fixedRate = 5000)
public void doSomething() {
// 需要执行的代码
}
- 如果你要想一个更加全面的任务设置,还可以使用cron表达式的方法:
@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
// 需要执行的代码,只在周一到周五执行
}
请注意,要调度的方法必须是空返回,并且不接受任何参数。如果该方法需要与应用程序上下文中的其他对象交互,则通常会通过依赖注入来提供这些对象。