Quartz定时任务基础学习
Quartz基础笔记
前言
1、什么是Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。
2、Quartz的运行环境是什么?
- Quartz可以运行嵌入在一个独立式应用程序
- Quartz可以在应用服务器或者Servlet容器实例化,并且参与事务
- Quartz可以作为一个独立的程序运行在自己的Java虚拟架构中,可以通过RMI使用
- Quartz可以被实例化,作为独立的项目集群(负载均衡或者故障转移功能),用于作业的执行
3、Quartz的运行环境
- Builder模式
- Factory模式
- 组件模式
- 链式编程
一、Quartz的核心概念
学习Quartz之前我们需要了解几个概念:
- Job(任务)
我们可以把这里Job理解为一个进程下的多个线程,Job表示一个工作,也就是执行具体业务逻辑的一个类,它里面就一个方法execuate
void execute(JobExecutionContext context)
- JobDeatil(可执行的任务调度)
这里的JobDetail我么可以看作是一个封装的Job类,只有将具体的业务Job封装成JobDetail才可以被Quartz识别并调用。另外 JobDetail 还包含了这个任务调度的方案和策略。
- Trigger(触发器)
代表一个调度参数的配置,即我们时候去调用在Trigger里设置
- Scheduler(调度容器)
是一个整合JobDetail和Trigger的容器,一个Scheduler里可以放置多个JobDetail和Trigger
1.1 案例DEMO
由上图我们可以清楚的了解到,一个jobDetail是由JobBuilder创建,一个Trigger是由TriggerBuilder创建。而JobDetail和Trigger里可以创建对应的JobDataMap,往Map里加一些参数,供execuate方法里获取到对应的JobDataMap根据键获取到对应的属性值。
【引入依赖】
<dependencies><!-- Quartz核心包 --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency><!-- QUartz工具包 --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.3.2</version></dependency><!-- Log4j --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
</dependencies>
【分析步骤】
- 由stdSchedulerFactory创建一个Scheduler
// 创建一个scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
可以通过scheduler获取到
context
(这里的context就是execuate里面的参数JobExecutionContext context
),从而往里面设置一些属性
- 由scheduler创建对应的JobDetail和Trigger
// 创建JobDetail 由JobBuilder创建JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("myjob", "mygroup").usingJobData("j1", "jv1").build();job.getJobDataMap().put("j2", "jv2");// 创建Trigger 由TriggerBuilder创建Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").usingJobData("t1", "tv1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever()).build();trigger.getJobDataMap().put("t2", "tv2");
由scheduler创建的JobDetail和Trigger都支持链式编程,
而且创建出来的JobDetail和Trigger都必须要添加一个属性withIdentity(String key,String value)
- 由scheduler添加创建出来的JobDetail和Trigger
scheduler.scheduleJob(JobDetail,Trigger);
- 启动Scheduler
scheduler.start();
如上图所示,Trigger每隔2s调用一次JobDetail执行Job所实现的Job真正的业务
上述示例是一个SimpleScheduler调度的。
1.2 Quartz核心API
Scheduler:与调度程序交互的接口
Job:你想要调度器执行的任务的组件所实现的接口
JobDetail:用于定义任务作业的示例
Trigger:触发器,用于定时调用JobDetail所封装的Job的组件
JobBuilder:构建JobDetail的示例的
TriggerBuilder:用于构建Trigger的示例的
1.3 Job和obDetail介绍
- Job:工作任务调度的接口,任务类需要实现该接口,该接口中定义execuate方法,类似JDK的TimeTask类的run方法,在里面编写执行业务逻辑。
- Job实例在Quartz中的生命周期,每次调度器执行完毕,他在调用execuate方法之前都会先创建一个新的Job实例,把原来的释放,释放的实力会被垃圾回收机制收回。
- JobDetail:jobDetail实力提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定的Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例。
- jobDetail重要属性:name,group,jobClass,jobDataMap
1.4 JobExecuateContext介绍
- 当Scheduler调用一个Job的时候,就会将JobExecuateContext传递给Job的execuate()方法。
- Job能通过JobExecuateContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。
1.5 JobDataMap介绍
(1)使用Map获取
- 在进行任务调度的时候,JobDataMap存储在JobExecuationContext中,非常方便获取。
- JbDataMap可以用来装载任何序列化的数据对象,当Job实例对象被执行时这些参数就会传递给它。
- JobDataMap实现了JDK的Map接口,并且添加了非常方便的方法用来存取基本的数据类型。
1.6 有状态的Job和无状态的Job
通过@PersistJobDataAfterExecuation注解使用
有状态的Job可以理解为多次Job调用期间可以持有一些信息,这些状态信息存储在JobDetail里面,而默认的无状态的Job每次调用都会创建一个新的JobDataMap。
1.7 Trigger的详解
和Job一样,Trigger也和Trigger一样很好使用,但是Trigger有很多的类型,这里只详细学习一下SimpleTrigger
和CornTrigger
两个核心的Trigger类型
1.7.1 Trigger的公共属性
注意:不管什么类型的Trgger,都有一个必须的属性:TriggerKey,用于唯一标识一个Trigger
除了TriggerKey以外,trigger还有一些公共属性。
- jobKey:当Trigger被触发的时候,执行的是哪一个Job
- startTime:开始触发的时间,该属性的值是一个java.util.Date类型的
- endTime:Trigger失效的时间点,比如说一个每个月的第五天执行的Trigger,假如他的endTime设置成7月1日,那么他最后一次执行的时间就是6月5日
1.7.2 Trigger的公共属性
Quartz定时任务基础学习相关推荐
- 详细总结:分布式, Nginx Linux Redis 微服务 Dubbo框架 Quartz定时任务
目录 1.1 概念 2.1分布式概念 2.2分布式项目拆分 2.3分布式项目总结 2.3 分布式事务 3.1 Nginx配置文件介绍 3.2 实现负载均衡(Tomcat高可用) 3.3 常见面试题 4 ...
- 零基础学习Java培训有什么攻略
零基础学习Java培训有什么攻略?java是主流编程语言之一,我们在学习Java的时候需要制定Java学习路线图,Java涉及到的知识点非常的多,我们该从何学起呢?怎么系统的学习呢?来看看下面的详细介 ...
- Quartz定时任务的基本搭建
前言 个人地址:Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单又强大的机制. Quartz中分为几个核心概念: J ...
- 零基础学习SpringBoot
注:本系列教程,又全部进行了更为深入的重写,可关注公众号:java4all,或进入SpringBoot教程,查看最新资料. 本篇是零基础学习SpringBoot专栏的目录,随时更新,可直接点击相应链接 ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
- Springboot 使用quartz 定时任务 增删改查
前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 ,浏览量还不错 , Springboot 整合定时任务 ) 所以就准备写第二篇, 如果你是一名Java工程师,你也可以会看到如下的页面 , ...
- ①小白学习Linux之基础学习★
Linux基础学习√ 1.centos6和7的变化 1.1.文件系统 1.2.防火墙.内核版本.默认数据库 1.3.时间同步,修改时区,修改语言 1.4.主机名 1.5.网络服务管理 1.6.网络设置 ...
- Kotlin 视频课程系列一:《零基础学习 Kotlin 编程》
Kotlin 系列课程一:<零基础学习 Kotlin 编程> 课程简介 在你决定要打开这个页面阅读的瞬间,风云巨变互联网行业里拼搏的你, 已经得到了一个引领时代 , 改变命运,突破瓶颈的机 ...
- vue基础学习记录(一)
根据B站黑马程序员 VUE教程基础学习 为了毕业设计做准备 Vue基础 工具准备 Vue的基本使用步骤 vue模板语法 `v-cloak`指令用法 数据绑定指令 数据响应式 双向数据绑定 MVVM设计 ...
最新文章
- 【Python】百度贴吧图片的爬虫实现(努力努力再努力)
- 带头结点的单链表的逆置
- Linux内存管理之mmap详解
- win7电脑浏览器证书过期的解决方法
- 以太坊代码标准是什么_以太坊:什么是ERC20标准?
- 从0到1带你手撸一个请求重试组件,不信你学不会!
- org.eclipse.birt.report.exception.ViewerException: 没有可用的报表设计对象.
- java过滤集合数量,java – 使用lambdaj过滤集合
- opencv php,OpenCV应用实例
- TIA博途中如何将CPU导出为GSD文件与其他PLC进行PROFINET通信?
- Matlab mapminmax函数使用及原理
- js做个人所得税计算器
- 程序员最不想让你知道的尴尬瞬间,看完我眼睛都绿了
- 机器学习分类光谱数据
- 公司名称怎么申请专利
- 埃拉托色尼筛选法------筛选质数
- 安装 Windows Server 2003 IIS6.0 详解(图)
- 模型修饰在无人机航测实景三维模型生产中的应用——以DP-Modeler软件为例
- MySQL课程设计2022 · 员工考勤管理系统
- 各种编码格式(GB2312,GBK,GB18030,unicode,utf-8)之间的关系
热门文章
目录 1.1 概念 2.1分布式概念 2.2分布式项目拆分 2.3分布式项目总结 2.3 分布式事务 3.1 Nginx配置文件介绍 3.2 实现负载均衡(Tomcat高可用) 3.3 常见面试题 4 ...
零基础学习Java培训有什么攻略?java是主流编程语言之一,我们在学习Java的时候需要制定Java学习路线图,Java涉及到的知识点非常的多,我们该从何学起呢?怎么系统的学习呢?来看看下面的详细介 ...
前言 个人地址:Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单又强大的机制. Quartz中分为几个核心概念: J ...
注:本系列教程,又全部进行了更为深入的重写,可关注公众号:java4all,或进入SpringBoot教程,查看最新资料. 本篇是零基础学习SpringBoot专栏的目录,随时更新,可直接点击相应链接 ...
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 ,浏览量还不错 , Springboot 整合定时任务 ) 所以就准备写第二篇, 如果你是一名Java工程师,你也可以会看到如下的页面 , ...
Linux基础学习√ 1.centos6和7的变化 1.1.文件系统 1.2.防火墙.内核版本.默认数据库 1.3.时间同步,修改时区,修改语言 1.4.主机名 1.5.网络服务管理 1.6.网络设置 ...
Kotlin 系列课程一:<零基础学习 Kotlin 编程> 课程简介 在你决定要打开这个页面阅读的瞬间,风云巨变互联网行业里拼搏的你, 已经得到了一个引领时代 , 改变命运,突破瓶颈的机 ...
根据B站黑马程序员 VUE教程基础学习 为了毕业设计做准备 Vue基础 工具准备 Vue的基本使用步骤 vue模板语法 `v-cloak`指令用法 数据绑定指令 数据响应式 双向数据绑定 MVVM设计 ...