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
- 删除 WordPress 导航菜单的多余 CSS 选择器(id或class)
- es6 对象的扩展
- 自定义WordPress 标签云小工具相关参数
- 检查.NET程序平台目标(Platform Target)工具CorFlags
- 哪些行业最适合抢驻小程序?
- WordPress 一键关闭/禁止页面评论功能
- 在一个.net sln中包含多个project,project引用同一个dll导致的错误
- Windows下安装MariaDB
- Quartz.net官方开发指南 第一课:使用Quartz.net
- Quartz.net官方开发指南 第二课:Jobs And Triggers
- 为你的WordPress 主题添加结构化数据/丰富文本摘要,高亮搜索结果(上)
- 复合事件处理(Complex Event Processing)介绍
- Quartz.net官方开发指南 第三课:更多关于Jobs和JobDetails
- 为你的WordPress 主题添加结构化数据/丰富文本摘要,高亮搜索结果(下)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Flutter基础widgets教程-TabBarView篇
- python + selenium 爬虫模拟登录破解无原图滑动验证码
- python 轻量级定时框架apscheduler,周中定时给自己发送邮件。
- python 舆情分析 nlp主题分析 (1) 待续
- Flutter基础widgets教程-Text篇
- python 舆情分析 nlp主题分析 (2)-结合snownlp与jieba库,提高分词与情感判断 待续
- No qualifying bean of type 'com.pjh.service.Imp.serviceImp' available和Exception in thread "main" jav
- python音频文件中pcm格式提取
- Spring系列之事务的控制 注解实现+xml实现+事务的隔离等级
- Leetcode刷题 237. 删除链表中的节点 两行代码实现
- python提取视频第一帧图片
- Leetcode刷题 206. 反转链表 递归迭代两种方法实现
- airtest本地连接和远程连接
- Flutter基础widgets教程-TextField篇
- poco对象生成的几种方式根据你使用不同的ui决定