对于工程中需要定时执行的一些任务,例如每天0点向数据库插入数据,每隔五分钟同步一次缓存等,都可以通过Spring Boot的定时任务来解决。
pom.xml添加依赖
依赖只需要spring-boot-starter
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
在主类中启用定时功能
在主类前添加@EnableScheduling
来启用定时功能:
@SpringBootApplication
@EnableScheduling
public class XXXApplication {
public static void main(String[] args) {
SpringApplication.run(XXXApplication.class, args);
}
}
创建定时任务类
可以为定时任务单独创建一个文件夹,在其下添加一个java类:
@Component
public class ScheduleTask {
// 每天01:30:00执行定时任务
@Scheduled(cron="00 30 01 * * *")
private void doMyScheduleTask(){
System.out.println("this is a scheduler task for day");
}
// 每隔1秒执行一次定时任务
@Scheduled(fixedRate=1000)
private void doMyScheduleTask2(){
System.out.println("this is a scheduler task for second");
}
}
其中:
- 类必须使用
@Component
注解来注入到Spring中。 - 函数必须使用
@Scheduled
注解来标记为定时执行函数。 @Scheduled
注解还用于设置定时间隔。- 使用
@Component
和@Scheduled
注解Spring即可实现定时执行任务功能,不需要进行任何额外设置。
关于定时间隔:
@Scheduled(cron="00 30 01 * * *")
:每天01:30:00执行定时任务。其时间设置为:秒 分 时 日 月 年。*表示所有。@Scheduled(fixedRate=1000)
:每隔1秒执行一次定时任务。无论上次任务是否已执行完。@Scheduled(fixedDelay=1000)
:上次任务执行完成后,等待1秒再执行一次定时任务。@Scheduled(initalDelay=5000, fixedRate=1000)
:第一次任务延迟5秒执行,之后每隔1秒执行一次定时任务。