Quartz基础笔记

前言

1、什么是Quartz

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。

2、Quartz的运行环境是什么?

  • Quartz可以运行嵌入在一个独立式应用程序
  • Quartz可以在应用服务器或者Servlet容器实例化,并且参与事务
  • Quartz可以作为一个独立的程序运行在自己的Java虚拟架构中,可以通过RMI使用
  • Quartz可以被实例化,作为独立的项目集群(负载均衡或者故障转移功能),用于作业的执行

3、Quartz的运行环境

  • Builder模式
  • Factory模式
  • 组件模式
  • 链式编程

一、Quartz的核心概念

学习Quartz之前我们需要了解几个概念:

  1. Job(任务)

我们可以把这里Job理解为一个进程下的多个线程,Job表示一个工作,也就是执行具体业务逻辑的一个类,它里面就一个方法execuate

void execute(JobExecutionContext context)
  1. JobDeatil(可执行的任务调度)

这里的JobDetail我么可以看作是一个封装的Job类,只有将具体的业务Job封装成JobDetail才可以被Quartz识别并调用。另外 JobDetail 还包含了这个任务调度的方案和策略。

  1. Trigger(触发器)

代表一个调度参数的配置,即我们时候去调用在Trigger里设置

  1. 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>

【分析步骤】

  1. 由stdSchedulerFactory创建一个Scheduler
// 创建一个scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

可以通过scheduler获取到context(这里的context就是execuate里面的参数JobExecutionContext context),从而往里面设置一些属性

  1. 由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)

  1. 由scheduler添加创建出来的JobDetail和Trigger
scheduler.scheduleJob(JobDetail,Trigger);
  1. 启动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有很多的类型,这里只详细学习一下SimpleTriggerCornTrigger两个核心的Trigger类型

1.7.1 Trigger的公共属性

注意:不管什么类型的Trgger,都有一个必须的属性:TriggerKey,用于唯一标识一个Trigger

除了TriggerKey以外,trigger还有一些公共属性。

  1. jobKey:当Trigger被触发的时候,执行的是哪一个Job
  2. startTime:开始触发的时间,该属性的值是一个java.util.Date类型的
  3. endTime:Trigger失效的时间点,比如说一个每个月的第五天执行的Trigger,假如他的endTime设置成7月1日,那么他最后一次执行的时间就是6月5日

1.7.2 Trigger的公共属性

Quartz定时任务基础学习相关推荐

  1. 详细总结:分布式, Nginx Linux Redis 微服务 Dubbo框架 Quartz定时任务

    目录 1.1 概念 2.1分布式概念 2.2分布式项目拆分 2.3分布式项目总结 2.3 分布式事务 3.1 Nginx配置文件介绍 3.2 实现负载均衡(Tomcat高可用) 3.3 常见面试题 4 ...

  2. 零基础学习Java培训有什么攻略

    零基础学习Java培训有什么攻略?java是主流编程语言之一,我们在学习Java的时候需要制定Java学习路线图,Java涉及到的知识点非常的多,我们该从何学起呢?怎么系统的学习呢?来看看下面的详细介 ...

  3. Quartz定时任务的基本搭建

    前言 个人地址:Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单又强大的机制. Quartz中分为几个核心概念: J ...

  4. 零基础学习SpringBoot

    注:本系列教程,又全部进行了更为深入的重写,可关注公众号:java4all,或进入SpringBoot教程,查看最新资料. 本篇是零基础学习SpringBoot专栏的目录,随时更新,可直接点击相应链接 ...

  5. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  6. Springboot 使用quartz 定时任务 增删改查

    前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 ,浏览量还不错 , Springboot 整合定时任务 ) 所以就准备写第二篇, 如果你是一名Java工程师,你也可以会看到如下的页面 , ...

  7. ①小白学习Linux之基础学习★

    Linux基础学习√ 1.centos6和7的变化 1.1.文件系统 1.2.防火墙.内核版本.默认数据库 1.3.时间同步,修改时区,修改语言 1.4.主机名 1.5.网络服务管理 1.6.网络设置 ...

  8. Kotlin 视频课程系列一:《零基础学习 Kotlin 编程》

    Kotlin 系列课程一:<零基础学习 Kotlin 编程> 课程简介 在你决定要打开这个页面阅读的瞬间,风云巨变互联网行业里拼搏的你, 已经得到了一个引领时代 , 改变命运,突破瓶颈的机 ...

  9. vue基础学习记录(一)

    根据B站黑马程序员 VUE教程基础学习 为了毕业设计做准备 Vue基础 工具准备 Vue的基本使用步骤 vue模板语法 `v-cloak`指令用法 数据绑定指令 数据响应式 双向数据绑定 MVVM设计 ...

最新文章

  1. 【Python】百度贴吧图片的爬虫实现(努力努力再努力)
  2. 带头结点的单链表的逆置
  3. Linux内存管理之mmap详解
  4. win7电脑浏览器证书过期的解决方法
  5. 以太坊代码标准是什么_以太坊:什么是ERC20标准?
  6. 从0到1带你手撸一个请求重试组件,不信你学不会!
  7. org.eclipse.birt.report.exception.ViewerException: 没有可用的报表设计对象.
  8. java过滤集合数量,java – 使用lambdaj过滤集合
  9. opencv php,OpenCV应用实例
  10. TIA博途中如何将CPU导出为GSD文件与其他PLC进行PROFINET通信?
  11. Matlab mapminmax函数使用及原理
  12. js做个人所得税计算器
  13. 程序员最不想让你知道的尴尬瞬间,看完我眼睛都绿了
  14. 机器学习分类光谱数据
  15. 公司名称怎么申请专利
  16. 埃拉托色尼筛选法------筛选质数
  17. 安装 Windows Server 2003 IIS6.0 详解(图)
  18. 模型修饰在无人机航测实景三维模型生产中的应用——以DP-Modeler软件为例
  19. MySQL课程设计2022 · 员工考勤管理系统
  20. 各种编码格式(GB2312,GBK,GB18030,unicode,utf-8)之间的关系

热门文章

  1. 【TCAX相关】‍用AvsPmod预览tcas特效字幕
  2. C++面试题大华/网顺总结
  3. NMAP扫描器常用指令
  4. 程序员技术开发委托合同模板 私活模板
  5. 数据库中主外键概念详细介绍
  6. MYSQL DATA_FORMAT函数
  7. python日期计算器 青少年编程电子学会python编程等级考试二级真题解析2021年12月
  8. 文件系统-- 安装根文件系统阶段(安装rootfs文件系统)
  9. 非主流茶馆: CIO的八种死法
  10. springboot明文密码加密解密