概述
@Scheduled
注解可以应用在方法上,用于指定方法的执行时间。它有几种常见的用法,可以设置固定的时间间隔、固定的延迟时间、或者使用Cron表达式来定义更复杂的调度规则。
应用场景
- 定时任务执行:例如每天凌晨执行数据备份。
- 定时报表生成:例如每周五下午生成一份周报。
- 定时数据同步:例如每隔一段时间同步远程数据。
示例代码
下面是一个简单的示例,展示如何在Spring Boot应用中使用@Scheduled
注解创建定时任务。
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class ScheduledTasks {// 每隔固定时间执行,单位毫秒@Scheduled(fixedRate = 5000) // 每隔5秒执行一次public void fixedRateTask() {System.out.println("Fixed rate task - " + System.currentTimeMillis() / 1000);}// 固定延迟时间执行,单位毫秒@Scheduled(fixedDelay = 10000) // 上次执行完毕时间点后10秒再执行public void fixedDelayTask() {System.out.println("Fixed delay task - " + System.currentTimeMillis() / 1000);}// 使用Cron表达式执行,每天凌晨1点执行@Scheduled(cron = "0 0 1 * * ?")public void cronTask() {System.out.println("Cron task - " + System.currentTimeMillis() / 1000);}
}
详细解释
@Scheduled(fixedRate = 5000)
:这个方法会每隔5秒执行一次,不论方法执行多长时间。@Scheduled(fixedDelay = 10000)
:这个方法会在上次方法执行完成后,延迟10秒后再次执行。@Scheduled(cron = "0 0 1 * * ?")
:这个方法会在每天凌晨1点钟执行,使用了一个Cron表达式来定义执行规则。
注意事项
- 被
@Scheduled
注解的方法不能有返回值,它们通常是void
类型的。 - 如果一个任务执行时间超过了定时时间间隔,Spring会等待任务完成后再继续下一个任务的执行。
@Scheduled
注解需要结合@EnableScheduling
注解一起使用,以启用Spring的任务调度功能。