Quartz自定义配置详解(二)——配置项含义

3,193 阅读5分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

在上一篇文章中,通过自定义配置实现了Quartz的持久化存储等功能,这次就来详细学习Quartz配置文件中配置项的具体含义。

1. Quartz配置信息

Quartz的配置内容根据功能可以分为四个部分:

  1. 调度器相关配置
  2. 数据源类型相关配置
  3. 线程池相关配置
  4. 监听器相关配置

2 调度器属性配置

调度器配置就是用来定义scheduler的相关属性,该类配置项定义时的前缀为org.quartz.scheduler.

2.1 相关属性名

  • instanceName,调度器实例名称,不配置时默认为QuartzScheduler
  • instanceId,调度器实例id,不配置时默认为NON_CLUSTERED,可以设置为Auto自动生成
    • 集群时为了保证id唯一,可以设置为Auto自动生成
    • instanceIdGenerator.class,调度器实例id的生成方式,只有在调度器示例id设置为Auto自动生成时有效,缺省值org.quartz.simpl.SimpleInstanceIdGenerator
  • threadName,调度器的线程名称,默认使用instanceName+’_QuartzSchedulerThread’
  • makeSchedulerThreadDaemon,是否将schedule主线程设置为守护线程,默认false
  • threadsInheritContextClassLoaderOfInitializer,Quartz生成的线程是否继承初始化线程的上下文类加载器,默认false
  • idleWaitTime,在调度程序空闲时,重复查询是否有可用触发器的等待时间,默认30000
  • dbFailureRetryInterval,连接超时重试连接的间隔,默认15000
  • classLoadHelper.class,类加载帮助类,默认org.quartz.simpl.CascadingClassLoadHelper
  • jobFactory.class, 指定JobFactory的类(接口)名称,负责实例化jobClass,默认值为org.quartz.simpl.PropertySettingJobFactory
  • wrapJobExecutionInUserTransaction,是否在Quartz执行一个job前使用UserTransaction,默认false
  • userTransactionURL,设置Quartz能够加载UserTransaction的JNDI的 URL,默认java:comp/UserTransaction
  • skipUpdateCheck,在程序运行前检查quartz是否有版本更新,默认false
  • batchTriggerAcquisitionMaxCount,允许调度程序一次性触发的触发器数量,默认值1
    • 值越大表示允许触发的任务越多
    • 如果值大于1时,需要设置org.quartz.jobStore.acquireTriggersWithinLock属性为true,以避免多个触发器产生的数据混乱
  • batchTriggerAcquisitionFireAheadTimeWindow,允许触发器被获取并在其预定的触发时间之前触发的数量,默认数量为0

2.2 常用属性

调度器相关的属性配置基本都有默认值,如果没有必要不需要对默认配置进行修改,常用到需要自定义配置的主要有实例名称和实例id生成方法几项。

# 调度器实例名称
org.quartz.scheduler.instanceName = Scheduler 
# 调度器实例编号自动生成 
org.quartz.scheduler.instanceId = AUTO

3. 数据源类型相关配置

quartz框架中数据源相关的配置属性的统一前缀为:org.quartz.jobStore.

3.1 具体属性名称

  • class,job的存储方式,可以选择存储在内存中或者持久化数据库中,默认为null
    • org.quartz.simpl.RAMJobStore 即存储在内存中,不适用配置文件时默认值
    • org.quartz.impl.jdbcjobstore.JobStoreTX 表示选择JDBC存储方式,自己管理事务
    • org.quartz.impl.jdbcjobstore.JobStoreCMT也表示JDBC,但是由全局JTA管理事务
  • driverDelegateClass,用于处理不同数据库之间差异的实现类,默认null
    • 使用mysql jdbc数据存储时设置为为org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  • dataSource,配置数据源的名称,默认null
    • 如果不配置数据源名称,可以使用spring配置文件中的数据源,并在scheduler创建时注入
    • 如果此处配置了数据源的名称,可以进一步在quartz文件中配置数据源信息
    # 配置数据源名称:`dataSoruce=dataSourceName`
    org.quartz.dataSource.dataSourceName.driver
    org.quartz.dataSource.dataSourceName.URL
    org.quartz.dataSource.dataSourceName.user
    org.quartz.dataSource.dataSourceName.password
    org.quartz.dataSource.dataSourceName.maxConnections
    
  • tablePrefix,表示quartz定时任务持久化时对应的数据表前缀,默认值QRTZ_
  • misfireThreshold,最大能忍受的触发超时时间,默认值60000,超时则认为失误
  • useProperties,使用key-value的形式存储JobDataMap,默认true
    • 指示JDBCJobStore所有的JobDataMaps中的值都是字符串,并且能以“名字-值”对的方式存储而不是以复杂对象的序列化形式存储在BLOB字段中,应该设置为true
  • isClustered,是否以集群方式运行,默认false
    • 如果多个quartz实例使用同一个数据库,则需要设置为true,否则会报错
  • clusterCheckinInterval,检入到数据库中的频率,默认20000
  • maxMisfiresToHandleAtATime,JobStore处理未按时触发的Job数量,默认20
  • dontSetAutoCommitFalse,事务是否自动提交,默认false
  • selectWithLockSQL,配置加锁的SQL语句,默认false,需要配置时默认语句是:
    SELECT * FROM [tableName] LOCKS WHERE LOCK_NAME = ? FOR UPDATE
  • txIsolationLevelSerializable,是否使用事务隔离级别中的可序列化,默认false
  • acquireTriggersWithinLock,触发事务前是否需要拥有锁,默认true
  • lockHandler.class,用于管理数据库中相关锁机制的类名,默认null

3.2 常用属性

对于quartz的数据源类型配置就比较重要了,如果想要定时任务存储在数据库中以保证持久化,就需要对数据源进行相应的配置。

#持久化方式配置 使用jkdbc存储在mysql数据库
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
#持久化方式配置数据驱动,mysql数据库 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 
#分布式部署 
org.quartz.jobStore.isClustered = true 
#分布式节点有效性检查时间间隔
org.quartz.jobStore.clusterCheckinInterval = 10000 
# quartz相关数据表前缀名 
org.quartz.jobStore.tablePrefix = quartz_ 
# JobDataMaps内容是否以key-value形式存储
org.quartz.jobStore.useProperties = false

3. 线程池相关配置

quartz框架配置文件中线程池相关的属性前缀为org.quartz.threadPool.

3.1 具体属性名称

  • class,线程池的实现类,一般默认使用org.quartz.simpl.SimpleThreadPool实例
  • threadCount,线程池中的线程数量,默认10
  • threadPriority,线程的优先级,默认5
  • makethreadsdaemons,是否设置为守护线程,默认false
  • threadsInheritContextClassLoaderOfInitializingThread,加载任务代码的ClassLoader是否从外部继承,默认true
    • 配置自动加载数据库中的任务信息
  • threadsinheritgroupofinitializingthread,默认false
  • threadnameprefix,线程默认的前缀,默认Worker

3.2 常用属性

quartz使用配置文件时,配置了默认值,如果有需要,可以改成合适的属性值。

#线程池实现类
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
#执行最大并发线程数量 
org.quartz.threadPool.threadCount = 20 
#线程优先级 
org.quartz.threadPool.threadPriority = 5 
#配置是否启动自动加载数据库内的定时任务
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

4. 监听器配置

quartz中的监听器使用较少,且其相关的配置也比较少

监听器相关属性前缀(prefix ):org.quartz.triggerListener.NAME.

  • class,全局触发器监听器实现类,默认null