Quartz框架配置文件Scheduler属性详解

with 3 comments

Scheduler调度容器,真正调度执行的地方,是Quartz框架进行调度的核心,提供了众多可定义的配置项供自行定制选择
以下属性默认org.quartz.Scheduler.XXX,为了简洁省略了org.quartz.Scheduler.部分,实际配置不可省略

instanceName

调度实例名,String值,非必须,默认为:QuartzScheduler
instanceName对Scheduler自己来说没有意义
当多个实例存在同一个程序中时,用于区分不同的Scheduler
如果使用集群,同一个Scheduler的实例必须使用相同的名字

instanceId

调度实例ID,String值,非必须,默认为:NON_CLUSTERED
在集群中多个Scheduler逻辑上是同一个,ID必须是唯一的
设置为"AUTO",自动生成ID
设置为"SYS_PROP",值来自系统属性"instanceId"

instanceIdGenerator.class

实例ID生成类,String值,非必须,默认为:org.quartz.simpl.SimpleInstanceIdGenerator
只有instanceId设置为"AUTO"才使用,默认主机名+时间戳生成实例ID的
可以自定义实现你自己的InstanceIdGenerator

threadName

线程名,String值,非必须
这个属性未设置,线程默认用Scheduler的名字(instanceName)加上字符串"_QuartzSchedulerThread"

makeSchedulerThreadDaemon

布尔值(true或者false),非必须,主线程是否为守护线程,默认false

threadsInheritContextClassLoaderOfInitializer

布尔值(true或者false),非必须,线程是否继承初始化Quartz实例的线程的上下文类加载器,默认false
该选项影响Quartz主调度线程、JDBCJobStore的失败处理线程、SimpleThreadPool中的线程
设置为true时,对于类加载、JNDI查找以及其它在应用服务器内使用Quartz的问题有所帮助

idleWaitTime

空闲等待时长,Long值,非必须,默认30000
Scheduler空闲时,重新查询可用的Trigger等待的时间(单位毫秒)
通常不需调整这个参数,不推荐小于5000ms,会造成大量的数据库查询,小于1000ms不合法

dbFailureRetryInterval

数据库连接丢失等待时长,Long值,非必须,默认15000
检测到与JobStore(或数据库)的连接丢失时,Scheduler重连的等待时间(单位毫秒)
当使用RamJobStore时,该参数没有意义

classLoadHelper.class

String值,非必须,配置默认值:org.quartz.simpl.CascadingClassLoadHelper
默认值为最稳定的方法,基本不需要设置这个属性

jobFactory.class

Job实例工厂类,String值,非必须,默认值:org.quartz.simpl.PropertySettingJobFactory
JobFatcory负责生成Job实例,简单调用Job类的newInstance()方法来生成实例

org.quartz.context.key.SOME_KEY

自定义键值对,String值,非必须,默认值:none
作为字符串放入SchedulerContext中
org.quartz.context.key.MyKey = MyValue等价执行Scheduler.getContext().put("MyKey", "MyValue")

userTransactionURL

Quartz定位UserTransaction管理者的URL,String值,非必须,默认值:java:comp/UserTransaction
默认值适用于大多数应用服务器
Websphere需要设置为"jta/usertransaction"
使用JobStoreCMT且wrapJobExecutionInUserTransaction为true时,才需要配置这个属性

wrapJobExecutionInUserTransaction

执行Job之前启动一个UserTransaction,布尔值(true或者false),非必须,默认:false

skipUpdateCheck

是否跳过快速访问web请求,布尔值(true或者false),非必须,默认:false
是否需要下载Quartz的更新版本
一般情况禁止更新检查,设置系统属性"org.terracotta.quartz.skipUpdateCheck=true"
或在命名行用-D参数指定,在生产环境部署时,建议禁止更新检查

batchTriggerAcquisitionMaxCount

Scheduler一次获取Trigger的最大数量,int值,非必须,默认值:1
这个数字越大,触发效率越高(许多Trigger需要同时触发的场景下)
在集群节点之间会有负载均衡的代价
值大于1,且使用JDBCJobStore,那么属性"org.quartz.jobStore.acquireTriggersWithinLock"必须设置true,以避免数据损坏

batchTriggerAcquisitionFireAheadTimeWindow

允许triger在调度时间之前获取和触发的时间(单位毫秒),Long值,非必须,默认值:0
这个数字越大,批量获取要触发的Trigger且在同一时刻触发一个以上的trigger的可能性越大
但是调度会变得不精确(Triggers可能提前触发)
对于有大量的Trigger需要同时触发的场景是很有用的(如性能测试)

Responses
  1. 熟悉的文字,只是很久不用

    Reply
  2. 表示看不懂,让人崇拜的技术大神!!!前来支持一下!

    Reply
    1. @自闭症

      一份工作而已 哈哈

      Reply