【配置详解】Quartz配置⽂件详解
我们通常是通过quartz.properties属性配置⽂件(默认情况下均使⽤该⽂件)结合StdSchedulerFactory 来使⽤Quartz的。StdSchedulerFactory 会加载属性配置⽂件并实例化⼀个Scheduler。
默认情况下,Quartz会加载classpath下的”quartz.properties”⽂件作为配置属性,如果不到则会使⽤quartz框架⾃⼰jar下org/quartz包底下
的”quartz.properties”⽂件。当然你也可以指定”org.quartz.properties”属性指向你⾃定义的属性配置⽂件。或者,你也可以在调⽤StdSchedulerFactory的 getScheduler()⽅法之前调⽤ initialize(xx)初始化factory配置。
在配置⽂件中你可以使⽤”$@”引⽤其他属性配置。
#============================================================================
ad中pcb的grid设置# Configure Main Scheduler Properties 调度器属性
#============================================================================
# 在集中每个实例都必须有⼀个唯⼀的instanceId,但是应该有⼀个相同的instanceName【默认“QuartzScheduler”】【⾮必须】
org.quartz.scheduler.instanceName = MyClusteredScheduler
loadport# Scheduler实例ID,全局唯⼀,【默认值NON_CLUSTERED】,或者可以使⽤“SYS_PROP”通过系统属性设置id。【⾮必须】
org.quartz.scheduler.instanceId = AUTO
# 只有在”org.quartz.scheduler.instanceId”设置为”AUTO”的时候才使⽤该属性设置。
# 默认情况下,“org.quartz.simpl.SimpleInstanceIdGenerator”是基于instanceId和时间戳来⾃动⽣成的。
# 其他的id⽣成器的实现包括 SystemPropertyInstanceIdGenerator 从系统属性获取 “org.quartz.scheduler.instanceId”, 和HostnameInstanceIdGenerator 使⽤主机名 (LocalHost().getHostName())。也可以⾃定义⽣成⽅式【默认
org.quartz.simpl.SimpleInstanceIdGenerator】【⾮必须】
#org.quartz.scheduler.instanceIdGenerator.class = org.quartz.simpl.SimpleInstanceIdGenerator
# 指定线程名,如果不指定的话,会⾃动使⽤org.quartz.scheduler.instanceName属性值加上后缀字符串”_QuartzSchedulerThread”.【默认instanceName+’_QuartzSchedulerThread’】【⾮必须】
#org.quartz.scheduler.threadName =
# 指定scheduler的主线程是否为后台线程,【默认false】【⾮必须】
#org.quartz.scheduler.makeSchedulerThreadDaemon = false
# 指定Quartz⽣成的线程是否继承初始化线程的上下⽂类加载器。这会影响Quartz的主调度线程、JDBCJobStore的”熄⽕”处理线程、集回复线程和线程池⾥的线程。 将该值设置为“true”可以帮助类加载,JNDI查,并在应⽤程序服务器上使⽤Quartz等相关问题,【默认false】【⾮必须】
#org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer = false
# 在调度程序空闲的时候,重复查询是否有可⽤触发器的等待时间。通常并不会设置为true,除⾮你是⽤XA事务,并且延迟触发会导致问题的场景。 5000ms 以下是不推荐的,因为它会导致过的的数据库查询。1000ms以下是⾮法的。【默认30000】【⾮必须】
#org.quartz.scheduler.idleWaitTime = 30000
# 连接超时重试连接的间隔。使⽤ RamJobStore时,该参数并没什么⽤【默认15000】【⾮必须】
#org.quartz.scheduler.dbFailureRetryInterval = 15000
# 最可靠的⽅式就是使⽤【默认”org.quartz.simpl.CascadingClassLoadHelper”】,没必要指定其他类【⾮必须】
#org.quartz.scheduler.classLoadHelper.class = org.quartz.simpl.CascadingClassLoadHelper
# 指定JobFactory的类(接⼝)名称。负责实例化jobClass。【默认”org.quartz.simpl.PropertySettingJobFactory”】,只是在job被执⾏的时候简单调⽤newInstance()实例化⼀个job类。PropertySettingJobFactory 会使⽤反射机制通过SchedulerContext、 Job、Trigger和 JobDataMaps设置job bean 的属性。在使⽤JTA事务时,可设置事务相关的属性【⾮必须】
#org.quartz.scheduler.jobFactory.class = org.quartz.simpl.PropertySettingJobFactory
免费建站网站一级123456#t.key.SOME_KEY = none
# 设置Quartz能够加载UserTransaction换利器的JNDI的 URL。Websphere 的⽤户可能会设置为“jta/usertransaction。只有在Quartz使⽤JobStoreCMT的时候,才会使⽤该属性,并且org.quartz.scheduler.wrapJobExecutionInUserTransaction也会设置为true。默认【默认值
是”java:comp/UserTransaction”】【⾮必须】
#org.quartz.scheduler.userTransactionURL = java:comp/UserTransaction
# 如果想使⽤Quartz在执⾏⼀个job前使⽤UserTransaction,则应该设置该属性为true。job执⾏完、在JobDataMap改变之后事务会提交。默认值是false。 可以在你的job类中使⽤ @ExecuteInJTATransaction注解, 可以控制job是否使⽤事务。【默认false】【⾮必须】
#org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
# 建议设置为“acotta.quartz.skipUpdateCheck=true”不会在程序运⾏中还去检查quartz是否有版本更新。【默认false】【⾮必须】
#org.quartz.scheduler.skipUpdateCheck = true
# 许调度程序⼀次性触发的触发器数量。.默认值是1。值越⼤⼀次性触发的任务就可以越多,但是在集
环境【⾮必须】下,不建议设置为很⼤值。如果值 > 1,并且使⽤了 JDBC JobStore的话, org.quartz.jobStore.acquireTriggersWithinLock属性必须设置为true,以避免”弄脏”数据。【默认1】
#org.quartz.scheduler.batchTriggerAcquisitionMaxCount = 1
# 允许触发器被获取并在其预定的触发时间之前触发的数量。【默认0】【⾮必须】
#org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow = 0
#============================================================================
# Configure ThreadPool 线程池属性
#============================================================================
# 线程池的实现类(定长线程池,⼏乎可满⾜所有⽤户的需求)【默认null】【必须】
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
# 指定线程数,⾄少为1(⽆默认值)(⼀般设置为1-100直接的整数合适)【默认-1】【必须】
dw网站制作的源代码org.quartz.threadPool.threadCount = 25
properties是什么文件# 设置线程的优先级(最⼤为java.lang.Thread.MAX_PRIORITY 10,最⼩为Thread.MIN_PRIORITY 1)【默认Thread.NORM_PRIORITY (5)】【⾮必须】
org.quartz.threadPool.threadPriority = 5
# ------------------设置SimpleThreadPool的⼀些属性,⼀般使⽤默认值-------------------------------
# 设置是否为守护线程
#org.quartz.threadpool.makethreadsdaemons = false
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#org.quartz.threadpool.threadsinheritgroupofinitializingthread = false
#线程前缀默认值是:[Scheduler Name]_Worker
#org.quartz.threadpool.threadnameprefix = swhJobThead;
# ------------------------配置全局监听(TriggerListener,JobListener) 则应⽤程序可以接收和执⾏ 预定的事件通知
# Configuring a Global TriggerListener 配置全局的Trigger。
# MyTriggerListenerClass 类必须有⼀个⽆参数的构造函数,和 属性的set⽅法,⽬前2.2.x只⽀持原始数据类型的值(包括字符串)
#iggerListener.NAME.class = com.swh.MyTriggerListenerClass
#iggerListener.NAME.propName = propValue
#iggerListener.NAME.prop2Name = prop2Value
# Configuring a Global JobListener 配置全局的Job
# MyJobListenerClass 类必须有⼀个⽆参数的构造函数,和 属性的set⽅法,⽬前2.2.x只⽀持原始数据类型的值(包括字符串)
#org.quartz.jobListener.NAME.class = com.swh.MyJobListenerClass
#org.quartz.jobListener.NAME.propName = propValue
#org.quartz.jobListener.NAME.prop2Name = prop2Value
#============================================================================
# Configure JobStore 配置数据存储的⽅式
#============================================================================
# ------------------------使⽤RAMJobStore配置
# 将schedule相关信息保存在RAM中,轻量级,速度快,遗憾的是应⽤重启时相关信息都将丢失。
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
# 最⼤能忍受的触发超时时间(触发器被认定为“misfired”之前),如果超过则认为“失误”【默认60秒】
org.quartz.jobStore.misfireThreshold = 60000
# ------------------------使⽤JDBCJobStore配置
# 所有的quartz数据例如job和Trigger的细节信息被保存在内存或数据库中,有两种实现:JobStoreTX(⾃⼰管理事务)和JobStoreCMT(application server 管理事务,即全局事务JTA)
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
# 最⼤能忍受的触发超时时间(触发器被认定为“misfired”之前),如果超过则认为“失误”【默认60秒】
org.quartz.jobStore.misfireThreshold = 60000
# 类似于Hibernate的dialect,⽤于处理DB之间的差异,StdJDBCDelegate能满⾜⼤部分的DB
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# 配置数据源的名称,在后⾯配置数据源的时候要⽤到,例如org.quartz.dataSource.clusterDS.driver = sql.jdbc.Driver
org.quartz.jobStore.dataSource = clusterDS
# 数据表前缀
org.quartz.jobStore.tablePrefix = QRTZ_
# 为了指⽰JDBCJobStore所有的JobDataMaps中的值都是字符串,并且能以“名字-值”对的⽅式存储⽽不是以复杂对象的序列化形式存储在BLOB字段中,应该设置为true(缺省⽅式)
org.quartz.jobStore.useProperties = true
# 是否集、负载均衡、容错,如果应⽤在集中设置为false会出错
org.quartz.jobStore.isClustered = true
# 检⼊到数据库中的频率(毫秒)。检查是否其他的实例到了应当检⼊的时候未检⼊这能指出⼀个失败的实例,且当前Scheduler会以此来接管执⾏失败并可恢复的Job通过检⼊操作,Scheduler也会更新⾃⾝的状态记录
org.quartz.jobStore.clusterCheckinInterval = 20000
# jobStore处理未按时触发的Job的数量
#org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
# true/false,true则调⽤connection的setAutoCommit(false)⽅法
org.quartz.jobStore.dontSetAutoCommitFalse = true
# 加锁的SQL语句,默认为SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
# {0}=$@org.quartz.jobStore.tablePrefix
org.quartz.jobStore.selectWithLockSQL = false
# true/false, true则调⽤connection的setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) ⽅法
org.IsolationLevelSerializable = false
# 触发job时是否需要拥有锁
org.quartz.jobStore.acquireTriggersWithinLock = true
# ⽤于管理数据库中相关信息的锁机制的类名
org.quartz.jobStore.lockHandler.class =
#============================================================================
# Configure Datasources 数据源
#============================================================================
# ------------------------使⽤常规数据源配置
# 数据库驱动
org.quartz.dataSource.NAME.driver = sql.jdbc.Driver
# 数据库连接地址
org.quartz.dataSource.NAME.URL = jdbc:mysql://${mysql.address}/etc-quartz?useUnicode=true&characterEncoding=utf8
# 数据库⽤户名
org.quartz.dataSource.NAME.user = ${mysql.user}
# 数据库密码
org.quartz.dataSource.NAME.password = ${mysql.password}
# 数据库最⼤连接数(如果Scheduler很忙,⽐如执⾏的任务与线程池的数量差不多相同,那就需要配置DataSource的连接数量为线程池数量+1)
org.quartz.dataSource.NAME.maxConnections = 30
# dataSource⽤于检测connection是否failed/corrupt的SQL语句
org.quartz.dataSource.NAME.validationQuery=select RAND()
# ------------------------使⽤JNDI数据源配置
# JNDI URL
org.quartz.dataSource.NAME.jndiURL =
# JNDI InitialContextFactory
org.quartz.dataSource.NAME.java.naming.factory.initial =
# 后三⾏为连接到JNDI提供者的相关信息
org.quartz.dataSource.NAME.java.naming.provider.url =
org.quartz.dataSource.NAME.java.naming.security.principal =
org.quartz.dataSource.NAME.java.dentials =
# ------------------------⽤户⾃定义org.quartz.utils.ConnectionProvider实现类
org.quartz.tionProvider.class =
org.quartz.dataSource.NAME.XXX =
scanf和sscanf-----------
实现故障处理和负载均衡,实现⾼可⽤性和扩展性通过共享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.不实现集的实例不使⽤同⼀套表
#============================================================================
# Configure Plugins 插件配置
#============================================================================
# 配置trigger执⾏历史⽇志(可以看到类的⽂档和参数列表)
org.iggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.iggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.iggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论