Quartzs -- Quartz.properties 配置
- 文件加载位置
默认:优先顺序 Classpath:quartz.properties --> org/quartz/quartz.properties (quartz lib)
改变默认:设置一个系统属性"org.quartz.properties"指向对应的properties文件
- 程序中显示指定
在StdSchedulerFactory.getScheduler()之前使用StdSchedulerFactory.initialize(xx)。
- properties文件中的属性关系
固定前缀org.quartz
主要分为scheduler,ThreadPool,JobStore,plugin等等部分
例如ThreadPool的配置信息
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
实例化ThreadPool的时候使用org.quartz.simpl.SimpleThreadPool,
实例化结束后threadCount,threadPriority 将以setter的形式注入到ThreadPool实例中
- 属性值的复用
$propertyName
$@org.quartz.scheduler.instanceName
- 官方配置文档
http://www.quartz-scheduler.org/documentation/quartz-1.x/configuration/
- threadPool
#Quartz ThreadPool
org.quartz.threadPool.class=threadPool类名(SimpleThreadPool就好)
org.quartz.threadPool.threadCount=thread数量,不会动态增长(所有的JOB)
org.quartz.threadPool.threadPriority=thread优先级
#Quartz SimpleThreadPool(使用默认就好)
#org.quartz.threadPool.makeThreadsDaemons=true/false是否为守护线程
#org.quartz.threadPool.threadsInheritGroupOfInitializingThread=true/false
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true/false
- jobStore
1)RAMJobStore
将schedule相关信息保存在RAM中,轻量级,速度快,遗憾的是应用重启时相关信息都将丢失。
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.misfireThreshold = 60000
misfireThreshold : 最大能忍受的触发超时时间,如果超过则认为“失误”
2)JDBC-JobStore
将schedule相关信息保存在RDB中.有两种实现:JobStoreTX和JobStoreCMT
前者为application自己管理事务
后者为application server管理事务,即全局事务JTA
JobStoreTX
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass
#类似于Hibernate的dialect,用于处理DB之间的差异,StdJDBCDelegate能满足大部分的DB
org.quartz.jobStore.dataSource
#这个值必须存于一个datasource的配置信息
#org.quartz.dataSource.XXX.driver...
org.quartz.jobStore.tablePrefix
#存储相关信息表的前缀
org.quartz.jobStore.useProperties
#JobDataMaps是否都为String类型
org.quartz.jobStore.misfireThreshold
#与RAMJobStore中的一致
org.quartz.jobStore.isClustered
#是否是应用在集群中,当应用在集群中时必须设置为TRUE,否则会出错org.quartz.jobStore.clusterCheckinInterval
#scheduler的checkin时间,时间长短影响failure scheduler的发现速度
org.quartz.jobStore.maxMisfiresToHandleAtATime
#jobStore处理未按时触发的Job的数量
org.quartz.jobStore.dontSetAutoCommitFalse
#true/false,true则调用connection的setAutoCommit(false)方法
org.quartz.jobStore.selectWithLockSQL
#加锁的SQL语句,默认为SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
#{0}=$@org.quartz.jobStore.tablePrefix
org.quartz.jobStore.txIsolationLevelSerializable
#true/false, true则调用connection的setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) 方法
org.quartz.jobStore.acquireTriggersWithinLock
#触发job时是否需要拥有锁
org.quartz.jobStore.lockHandler.class
#用于管理数据库中相关信息的锁机制的类名
- dataSource
建议最大的连接数最少为ThreadPool的threadCount,并且如果应用经常访问scheduler的API的话最好是有一些额外的connection,也就是说要比ThreadPool的worker threads大一些
三种方式
1)datasource的相关信息全部定义于quartz.properties中,quartz自己创建datasource
org.quartz.dataSource.NAME.driver
org.quartz.dataSource.NAME.URL
org.quartz.dataSource.NAME.user
org.quartz.dataSource.NAME.password
org.quartz.dataSource.NAME.maxConnections
#以上为dataSource的基本属性,大家都懂的
#NAME必须与$@org.quartz.jobStore.dataSource一致
org.quartz.dataSource.NAME.validationQuery
#dataSource用于检测connection是否failed/corrupt的SQL语句
2)使用JNDI的datasource
org.quartz.dataSource.NAME.jndiURL
#JNDI URL
org.quartz.dataSource.NAME.java.naming.factory.initial
#JNDI InitialContextFactory
org.quartz.dataSource.NAME.java.naming.provider.url
org.quartz.dataSource.NAME.java.naming.security.principal
org.quartz.dataSource.NAME.java.naming.security.credentials
#后三行为连接到JNDI提供者的相关信息
3)用户自定义org.quartz.utils.ConnectionProvider实现类
org.quartz.dataSource.NAME.connectionProvider.class
org.quartz.dataSource.NAME.XXX
- Cluster

实现故障处理和负载均衡,实现高可用性和扩展性
通过共享DB Tables实现,所以必须使用JDBC-Jobstore
负载均衡 : 谁先触发谁执行,并且一次只有一个scheduler触发
故障处理 : 当一个scheduler失败后,其它的实例可以发现那些执行失败的Jobs,假如Job对应的JobDetail标记为recovery(属性"requests recovery"),那么该Job就会被其它的实例重新执行,否则对应的Job只会被释放等待下次被触发。
实现:
org.quartz.jobStore.isClustered = true
所有的实例的quartz.properties文件除了org.quartz.scheduler.instanceId和org.quartz.threadPool.threadCount必须一致,org.quartz.scheduler.instanceId = AUTO 即可实现ID的不一致
注意:
1.不在不同的机器上实现集群功能,除非他们的时钟同步精确到秒
2.不实现集群的实例不使用同一套表
Quartzs -- Quartz.properties 配置的更多相关文章
- 【Quartz】配置最简单的集群
在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障.机器宕机而导致某一笔定时任务不能按时运行.这种情况下,我们就需要为Quartz做个集群. 最简单的情况,有两台机器或两个应用,同时维护一批定 ...
- Quartz的配置文件quartz.properties详解
配置 quartz.properties 文件 文件 quartz.properties 定义了 Quartz 应用运行时行为,还包含了许多能控制 Quartz 运转的属性.这个文件应该放在class ...
- 【Quartz】Quartz存储与持久化-基于quartz.properties的配置
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. Quartz存储与持久化 Quartz提供两种基本作业存储类型.第一种类型叫做RAM ...
- Quartz.NET配置
概述 Quartz.NET 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性.Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行 ...
- Quartz动态配置表达的方法
在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间, ...
- quartz.properties完整版
我们通常是通过quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory 来使用Quartz的.StdSchedulerFactory 会加载属 ...
- C# Quartz的配置
1. 介绍 Quartz为后台工作者提供了得便利,我们下面介绍一下它的配置.本文配置主要针对服务程序的配置. 但是在做下面配置之前,要安装包 Install-Package Quartz 2. Qua ...
- 二)quartz.properties
The Properties File Quartz uses a properties file called (kudos on the originality) quartz.propertie ...
- Spring 与 Quartz 动态配置(数漫江湖)
因为项目的需求,需要有动态配置计划任务的功能.本文在 Quartz JobBean 中获取配置的 Quartz cronExpression 时间表达式及 Spring Bean 的对象名.方法名并运 ...
随机推荐
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...
- COJ1013 : WZJ的数据结构(十三)
这道题有这样一个解法: 首先把边依次加到图中,若当前这条边与图中的边形成了环,那么把这个环中最早加进来的边弹出去并将每条边把哪条边弹了出去记录下来:ntr[i] = j,特别地,要是没有弹出边,ntr ...
- HttpClient_HttpClient 4.3.6 HTTP状态管理
HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...
- ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机 使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linu ...
- sqlserver常用日期、时间函数和格式
Sql Server中常用的日期与时间函数1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 ...
- iOS -- MVC的理解
今天在写项目的时候困惑了一下 我在写一个应用的主界面,其实是很简单的,上面有几个控件,我在想把空间写到viewController里会不会有点冗杂 后来查了一下,发现貌似也不需要分开写,毕竟界面好简单 ...
- eval(gzinflate(base64_decode N层,自动解密
<?php header("Content-type: text/html; charset=utf-8"); $decode = 'DZdFEsRWEkT3vojt0EJM ...
- opengl画圆
通过这个例子可以更加深刻的了解割圆术的原理,明白如何的化曲为直,且看代码: #include <windows.h> //#include <GLUT/glut.h> #inc ...
- php文件以二进制形式上传并放入到数据库中
conn.php: <?php $id=mysql_connect('localhost','root','root'); mysql_select_db("db_database12 ...
- 使用 matlab 产生GK101任意波数据文件的方法
一.引言 MATLAB是由美国mathworks公司发布的主要面对科学计算.可视化以及交互式程序设计的高科技计算环境.它不但包含高效的数值计算.数据处理能力,而且简单易用,是工程师日常研发过程中不可缺 ...