SpringBoot---scheduling定时任务的使用总结

时间:2019-11-27
本文章向大家介绍SpringBoot---scheduling定时任务的使用总结,主要包括SpringBoot---scheduling定时任务的使用总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、前言

在介绍一个技术名词的时候,我的思路是如下的。

1. 知道名词概念

2. 具有什么功能

3. 具体的使用步骤

4. 核心的组件

5. 技术的基本执行流程

6. 技术需要注意的坑

7. 技术和其他的优秀的同类型框架的对比

二、定时任务的介绍

定时任务相当与我们生活中的闹钟,可以满足周期性执行任务的需求。

三、scheduling具有什么功能

1. 可以按周期进行执行,如每天3点执行一次啊 ,符合cron表达式

2. 可以按fixedDelay延迟执行,每隔几秒执行一次

3. 可以按fixedRate执行,没有延迟,直接每隔几秒执行一次

2和3是具有细微的区别的

scheduling也是一个单现线程处理的程序。

四、具体的使用步骤

SpringBoot中的核心具有集成了Scheduled功能,step1.在@SpringBootApplication中基础上写@EnableScheduling 开启定时任务

step2.在具体的组件的方法需要使用 @scheduled(cron="") |@scheduled(fixedDelay="")|@scheduled(fixedRate="")放置在方法注解上

@SpringBootApplication
@EnableScheduling
public class CrudApplication {
}

@Component
public class PrintTask {
@Scheduled(cron = "*/20 * * * * *")//20秒执行一次
public void print() throws InterruptedException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(new Date())+",发送一个定时任务");
Thread.sleep(10000);
}
}

需要去了解Cron表达式

五、基本执行流程

springBoot中启动的使用SpringootApplication.run会生成spring对象,然后会去加载环境上下文也就是容器,在容器解析中的过程中执行后置处理器PostProcessor 

在这个方法中会去获得bean中是否具有方法是被@scheduled进行注解的,如果是则把这个方法作为一个task放置到register列表中,然后Spring生成一个RegisterBean,该Bean就是会去执行register列表中的任务。

根据xx时间,然后进行堵塞,然后先执行cron的任务,执行完再执行其他的任务,使用了juc中的技术。

六、技术需要注意的坑

该处理任务是单线程的,也就是说如果一个任务执行时间过长,那么其他的任务当时间了也不能就行执行,只有上一个任务进行执行完成之后才能执行,这样的时候有时候就不能达到我们想要的效果了。

解决方法,使用多线程进行异步处理。

七、技术和其他的优秀的同类型框架的对比

具有Quartz这个任务调度框架可以代替sheduling,quartz具有二大特点的功能

  • 持久性作业 - 就是保持调度定时的状态;
  • 作业管理 - 对调度作业进行有效的管理;

同时,支持多线程。

原文地址:https://www.cnblogs.com/fc520/p/11941885.html