Spring Boot之定时调度Scheduled Tasks
平常项目中经常可能会有一些定时调度的需求,就会需要用到Quartz或者是Scheduled Tasks,Scheduled Tasks相比于Quartz,更为轻量,当然功能上也没有Quartz全面,对于需求不复杂的定时调度,用Schduled Tasks反而会更方便,今天就讲一下Spring Boot中使用Scheduled Tasks。
关于Spring Boot中怎么去使用定时任务,官网这里有给出简单的例子戳我
构建项目
首先我们构建一个Spring Boot项目,不需要向其中添加任何依赖,已经自带了Scheduled Tasks,然后我们需要在启动类中加上注解@EnableScheduling
,用以开启定时调度功能。
@SpringBootApplication
@EnableScheduling
public class ScheduledTaskApplication {
public static void main(String[] args) {
SpringApplication.run(ScheduledTaskApplication.class, args);
}
}
创建任务
创建一个test类,加上注解@Component
,对于这个注解的作用大家都应该知道的,然后对于需要做调度的方法上加上注解@Scheduled
,这个注解有几个属性,这里分别简单解释一下
cron—cron表达式,不解释,该懂的
zone—cron表达式使用的时区,默认为本机对应时区
fixedDelay—固定时间间隔执行,即最后一次执行完到下一此执行开始的时间
fixedDelayString—同上,只是参数为String类型
fixedRate—以固定的时间间隔执行
fixedRateString—同上,只是参数为String类型
initialDelay—任务第一次执行前,延迟时间
initialDelayString—同上,只是参数为String类型
下面为我的测试类,对于这几个属性分别测试了一下
@Component
public class TaskTest {
@Scheduled(cron = "0/5 * * * * ? ")
public void test1() {
System.out.println("当前时间:" + LocalTime.now() + "------test1被调度");
}
@Scheduled(fixedRate = 5000)
public void test2() {
System.out.println("当前时间:" + LocalTime.now() + "------test2被调度");
}
@Scheduled(fixedDelay = 5000)
public void test3() {
System.out.println("当前时间:" + LocalTime.now() + "------test3被调度");
}
@Scheduled(initialDelay = 2000, fixedDelay = 5000)
public void test4() {
System.out.println("当前时间:" + LocalTime.now() + "------test4被调度");
}
@Schedules(value = {@Scheduled(cron = "0 04 23 * * ? "), @Scheduled(cron = "0 05 23 * * ? ")})
// @Scheduled(cron = "0 01 23 * * ? ")
// @Scheduled(cron = "0 02 23 * * ? ")
public void test5() {
System.out.println("当前时间:" + LocalTime.now() + "------test5被调度");
}
}
@Schedules
上面的测试类中,还使用了@Schedules
这样的注解,这个注解只有一个value属性,接收一个@Scheduled
数组作为参数,我想应该可以猜到它的作用了吧,那它是干嘛的呢?其实也就是对于一个任务,可能有不同的执行需求,比如:同一天中,不同时间段的执行频率不一样,那么我们可以使用它。
在它的注释中还提到,@Scheduled
注解也可以多个一起用,测试类中注释部分和上面@Schedules
作用一样
测试
这里5个test方法打印出的结果为:
当前时间:23:03:40.002------test1被调度
当前时间:23:03:45.003------test1被调度
当前时间:23:03:50.001------test1被调度
当前时间:23:03:55.004------test1被调度
当前时间:23:04:00.003------test1被调度
当前时间:23:03:39.747------test2被调度
当前时间:23:03:44.748------test2被调度
当前时间:23:03:49.747------test2被调度
当前时间:23:03:54.745------test2被调度
当前时间:23:03:59.748------test2被调度
当前时间:23:03:39.747------test3被调度
当前时间:23:03:44.748------test3被调度
当前时间:23:03:49.748------test3被调度
当前时间:23:03:54.749------test3被调度
当前时间:23:03:59.750------test3被调度
当前时间:23:03:41.744------test4被调度
当前时间:23:03:46.744------test4被调度
当前时间:23:03:51.748------test4被调度
当前时间:23:03:56.752------test4被调度
当前时间:23:04:01.756------test4被调度
当前时间:23:04:00.004------test5被调度
当前时间:23:05:00.005------test5被调度
可以看到@Schedules
的注解确实执行了两次
代码
推荐阅读
-
Spring Boot @Scheduled定时任务代码实例解析
-
Spring Boot与Kotlin定时任务的示例(Scheduling Tasks)
-
Spring Boot入门(三):使用Scheduled注解实现定时任务
-
Spring Boot @Scheduled定时任务代码实例解析
-
spring boot 定时器 Scheduled 不执行
-
现有web系统替换成Spring Boot2框架 之10 定时任务Quartz Scheduler spring bootmaven定时任务quartz
-
spring boot 集成quartz实现定时任务调度
-
Spring Boot中的Scheduled定时任务
-
Spring Boot 与 Kotlin 定时任务(Scheduling Tasks)
-
【Spring Boot架构】定时任务注解@Scheduled的使用