在Spring Boot中,@Scheduled注解可以用来创建定时任务。在@Scheduled注解中,有两个比较常用的属性:fixedDelay和fixedRate,它们都可以用来设置定时任务的执行时间间隔。
fixedDelay:表示上一个任务执行结束后隔一段时间再开始下一次任务。即当任务执行完毕后,会等待一段时间,然后再执行下一次任务。如果上一个任务执行的时间很长,那么下一个任务会延迟执行。
fixedRate:表示以固定的频率执行任务。即无论上一个任务执行的时间长短,下一次任务都会在固定的时间间隔后开始执行。如果上一个任务执行的时间很长,那么下一个任务也会按照固定的时间间隔开始执行,可能会导致并发执行多个任务。
因此,fixedDelay适合任务执行时间较长的场景,而fixedRate适合任务执行时间较短的场景。
下面是两者使用的示例:
@Component
public class ScheduleTask {
// fixedDelay方式
@Scheduled(fixedDelay = 5000)
public void task1() {
System.out.println("task1每隔5秒执行一次");
}
// fixedRate方式
@Scheduled(fixedRate = 5000)
public void task2() {
System.out.println("task2每隔5秒执行一次");
}
}
在上面的代码中,task1和task2都是每隔5秒执行一次。但是,如果task1的执行时间超过5秒,那么下一个任务就会在上一个任务结束后等待一段时间再开始执行;而task2无论上一个任务执行的时间长短,下一次任务都是在固定的时间间隔后开始执行。