Quartz使用(5) - Quartz的Job存储及集群部署
1. Job的存储与持久化
Quartz的JobStore接口定义了作业Job、触发器trigger、调度器Scheduler等数据存储机制。Quartz主要有两种Job存储类型:内存存储RAMJobStore和持久化存储JDBCJobStore。下面将对其一一介绍。
2. RAMJobStore
RAMJobStore是将Quartz涉及到的Job、Trigger、Scheduler等信息存储在内存中,是Quartz默认使用且最有效的Job存储方式。但其缺点也显而易见,一旦Quartz程序停止,内存中的Job信息将会丢失。
使用RamJobStore时,如果未设置Quartz的配置文件quartz.properties,则编写Quartz程序默认使用RAMJobStore,如果需要在quartz.properties中进行设置"org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore",可参考如下:
#============================================================================
# Configure Main Scheduler Properties
#============================================================================ org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: AUTO org.quartz.scheduler.skipUpdateCheck: true #============================================================================
# Configure ThreadPool
#============================================================================ org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 3
org.quartz.threadPool.threadPriority: 5 #============================================================================
# Configure JobStore
#============================================================================ org.quartz.jobStore.misfireThreshold: 60000 org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore #============================================================================
# Configure Plugins
#============================================================================ org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames: quartz_data.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound: true
org.quartz.plugin.jobInitializer.scanInterval: 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction: false
3. JDBCJobStore
JDBCJobStore是将Quartz涉及的Job、Trigger、Scheduler通过JDBC存储到数据库中。与RAMJobStore相比,JDBCJobStore的配置稍微复杂些,且效率相对低。但其优点在于可以将Quartz的运行信息持久化。JDBCJobStore基于对所有的数据库有效,包括:Oracle, PostgreSQL, MySQL, MS SQL Server, HSQLDB, DB2等。当使用JDBCJobStore时,需要设置配置文件、以及创建相关的数据库表。
1) 设置quartz.properties
在quartz.preperties中设置JDBCJobStore,只需设置"org.quartz.jobStore.class = org.quartz.simpl.JDBCJobStore",以及设置对应的数据表即可。具体配置信息参考如下(下表为mysql的配置信息):
#============================================================================
# Configure Main Scheduler Properties
#============================================================================ org.quartz.scheduler.instanceName: OcpScheduler
org.quartz.scheduler.instanceId: OcpInstance_1 org.quartz.scheduler.skipUpdateCheck: true #============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 50
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true #============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold: 120000 org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties: false
org.quartz.jobStore.tablePrefix: QRTZ_
org.quartz.jobStore.dataSource: ocpQzDs
org.quartz.jobStore.isClustered: true
org.quartz.jobStore.clusterCheckinInterval = 60000 #============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.ocpQzDs.driver: com.mysql.jdbc.Driver
org.quartz.dataSource.ocpQzDs.URL:jdbc:mysql://127.0.0.1:3306/ocp?useUnicode=true&characterEncoding=utf-8
org.quartz.dataSource.ocpQzDs.user: test
org.quartz.dataSource.ocpQzDs.password: test
org.quartz.dataSource.ocpQzDs.maxConnection: 30 #============================================================================
# Configure Plugins
#============================================================================
org.quartz.plugin.shutdownHook.class: org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownHook.cleanShutdown: true #org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin
2) 创建数据表
将数据库及表的创建写入sql文件,导入即可。相关的表如下所示:
|
表名 |
说明 |
|
QRTZ_FIRED_TRIGGERS |
存存放已触发的触发器 |
|
QRTZ_PAUSED_TRIGGER_GRPS |
存放暂停掉的触发器 |
|
QRTZ_SCHEDULER_STATE |
调度器状态 |
|
QRTZ_LOCKS |
存储程序的悲观锁的信息 |
|
QRTZ_SIMPLE_TRIGGERS |
简单触发器的信息 |
|
QRTZ_SIMPROP_TRIGGERS |
|
|
QRTZ_CRON_TRIGGERS |
存放cron类型的触发器 |
|
QRTZ_BLOB_TRIGGERS |
以Blob 类型存储的触发器 |
|
QRTZ_TRIGGERS |
触发器的基本信息 |
|
QRTZ_JOB_DETAILS |
存放一个jobDetail信息 |
|
QRTZ_CALENDARS |
存放日历信息 |
4. Quarz应用集群
Quartz集群架构如下,集群中的每个节点是一个独立的Quartz应用,且独立的Quartz节点并不与另一节点通信,而是通过相同的数据库表来感知另一Quartz应用。简而言之,Quartz应用、数据库支撑、多节点部署即可搭建起Quartz的应用集群。

Quartz集群还在同一个数据库下,由数据库中的数据来确定任务是否正在执行,如果该任务正在执行,则其他服务器就不能去执行该调度任务。Quartz集群的特点如下:
1) 持久化
Quartz可以将调度器scheduler、触发器trigger以及任务Job的运行时信息存储至数据库中,采用JDBCJobStore,如果服务器异常时,可以基于数据库中的存储信息进行任务恢复。
2) 高可用性
如果相关服务器节点挂掉的话,集群的其他节点则会继续执行相关任务。
3) 伸缩性
如果集群中的节点数过少,导致相关任务无法及时执行,可以增加额外的服务器节点,只需将其他节点上的脚本及配置信息拷贝至新部署的节点上运行即可。
4) 负载均衡
Quartz使用随机的负载均衡算法,任务job是以随机的方式由不同的节点上Scheduler实例来执行。但当前不存在一个方法指派一个Job到集群中的特定节点。
5. 下节概述
下一节会将项目中应用Quartz模块相关方案设计、流程架构、及重点代码一一呈现。
Quartz使用(5) - Quartz的Job存储及集群部署的更多相关文章
- Quartz.net持久化与集群部署开发详解
序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项 ...
- Quartz学习笔记:集群部署&高可用
Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...
- Redis存储Tomcat集群的Session
Redis存储Tomcat集群的Session 如何 做到把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机.对使用用户零影响. 设想 是使用集群来搞定,通过通知负载均衡Nginx,取下集群中 ...
- Linux之nginx反向代理+三台web+nfs共享存储实现集群配置
作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...
- Spring Boot+redis存储session,满足集群部署、分布式系统的session共享
本文讲述spring-boot工程中使用spring-session机制进行安全认证,并且通过redis存储session,满足集群部署.分布式系统的session共享. 原文链接:https://w ...
- 使用IBM SVC构建vSphere存储间集群
使用IBM SVC构建vSphere存储间集群 本文目的 本文描述利用IBM SVC来构建Vsphere 存储间集群 解决方案 什么是vMSC? vShpere存储间集群是一个针对VmwarevSpe ...
- 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】
一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的序列化机制,可以序列到 sqlserver,mysql,当然还可以在 ...
- 第十节: 利用SQLServer实现Quartz的持久化和双机热备的集群模式 :
背景: 默认情况下,Quartz.Net作业是持久化在内存中的,即 quartz.jobStore.type = "Quartz.Simpl.RAMJobStore, Quartz" ...
- quartz.net实现集群部署的笔记
一..表信息 QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括Cron表达式和 ...
随机推荐
- linux配置mysql主从复制
1.准备工作,2台服务器都安装最好一个版本的mysql 主:192.168.100.1 从:192.168.100.2 a.修改主数据库/etc/my.cnf,mysqld下添加.修改之后重启. [m ...
- 多用户ATM机(面向对象编程)
let readline = require('readline-sync'); // 清屏函数 let clear = () => process.stdout.write(process.p ...
- 动态绑数据(GridView控件Header和ItemTemplate)
想了解此篇文章,建议先预习一下<动态变更GridView控件列名>http://www.cnblogs.com/insus/p/3232057.html,因为多少有些关联.不管怎样,它能够 ...
- Android Android环境安装
Android环境安装 一.下载: 所需:eclipse.sdk.jdk.adt 参考 工具下载地址:http://www.androiddevtools.cn/ 二安装: 1.eclipse: 选择 ...
- Linux根目录结构
1: bin目录 此目录存放所有二进制命令(用户) 2: boot目录 Linux内核及引导系统程序所需的目录 3: dev目录 所有设备文件的目录(如声卡.磁盘.光驱) 4: etc目录 二 ...
- srs录制视频时间戳有点问题
srs2或者srs3目前最新的版本和之前的版本,使用dvr功能录制flv文件.使用本地播放器,如ffplay.potplayer.vlc.KMP和MPV等,都是正常的播放完整视频.但是使用web fl ...
- 生成对抗网络(GAN)相关链接汇总
1.基础知识 创始人的介绍: “GANs之父”Goodfellow 38分钟视频亲授:如何完善生成对抗网络?(上) “GAN之父”Goodfellow与网友互动:关于GAN的11个问题(附视频) 进一 ...
- linux惊群
基本概念:子进程继承父进程环境和上下文的大部分内容的拷贝,其中就包括文件描述符表. 父进程fork出来的子进程,复制父进程的文件描述符.这些文件描述符fd是独立的,但是文件描述符指向的系统文件表项是唯 ...
- 论文阅读笔记五十六:(ExtremeNet)Bottom-up Object Detection by Grouping Extreme and Center Points(CVPR2019)
论文原址:https://arxiv.org/abs/1901.08043 github: https://github.com/xingyizhou/ExtremeNet 摘要 本文利用一个关键点检 ...
- angularJs实现修改功能
思路: 对表单中内容进行修改,首先需要获取这个内容,再进行修改,再清空弹窗中的内容 //查询实体 $scope.findOne=function(id){ $http.get('../brand/fi ...