1、@Scheduled、@EnableScheduling
在一些业务场景中需要执行定时操作来完成一些周期性的任务,比如每隔一周删除一周前的某些历史数据以及定时进行某项检测任务等等。Spring 3.0 版本之后自带定时任务,提供了@EnableScheduling注解和@Scheduled注解来实现定时任务功能。
- 元注解@Target表明@Scheduled注解可以在方法上使用(ElementType.METHOD),也可以作为元注解对其他注解进行注解(ElementType.ANNOTATION_TYPE)
- 元注解@Retention表明此注解会被JVM所保留,也就是会保存在运行时(RetentionPolicy.RUNTIME)
- 元注解@Documented表明此注解应该被 javadoc工具记录。默认情况下javadoc是不包括注解的。
- JDK8添加的注解@Repeatable表明此注解可以在同一个地方被重复使用
1、@Scheduled:默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。在需要配置定时任务的方法上使用注解@Scheduled即可。
@Scheduled(cron = "0 7 22 * * ? ")
@Override
public void testSchedule() {
System.out.println("-------- 测试定时器----------");
}
2、@EnableScheduling注解: 在配置类上使用,开启计划任务的支持(类上)。
@EnableScheduling
public class BookApp {
public static void main(String[] args) {
SpringApplication.run(BookApp.class, args);
}
}
Cron在线表达式生成器
二、quartz
因为在日常的业务中任务的执行时间经常会变动,即cron的表达式,所以用@Scheduled就有些麻烦了,因为需要去找到各个位置并修改,而quartz就很好的可以封装成一个可修改的调用接口,方便业务的多变性。
1、Spring Boot 集成 Quartz 的方式也很简单,首先引入封装好的 Quartz 依赖。