spring的定时任务(@Scheduled)的几种使用方法

  • 第一要启用对 @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() {
    // 需要执行的代码,只在周一到周五执行
}

请注意,要调度的方法必须是空返回,并且不接受任何参数。如果该方法需要与应用程序上下文中的其他对象交互,则一般会通过依赖注入来提供这些对象。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容