阅读(297) (1)

Quartz配置JDBC-JobStoreTX

2017-09-27 11:51:40 更新

配置JDBC-JobStoreTX

JDBCJobStore用于在关系数据库中存储调度信息(jobs,Triggers和日历)。实际上,您可以选择两个独立的JDBCJobStore类,具体取决于您需要的事务性行为。

JobStoreTX通过在每次操作(如添加jobs)后调用数据库连接上的commit()(或rollback())来管理所有事务。如果在独立应用程序中使用Quartz,或者在应用程序不使用JTA事务的情况下,则在Servlet容器中使用JDBCJobStore。

通过设置“org.quartz.jobStore.class”属性来选择JobStoreTX:

将调度程序的JobStore设置为JobStoreTX

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

JobStoreTX可以使用以下属性进行调整:

Property NameRequiredTypeDefault Value
org.quartz.jobStore.driverDelegateClassyesstringnull
org.quartz.jobStore.dataSourceyesstringnull
org.quartz.jobStore.tablePrefixnostring"QRTZ_"
org.quartz.jobStore.usePropertiesnobooleanfalse
org.quartz.jobStore.misfireThresholdnoint60000
org.quartz.jobStore.isClusterednobooleanfalse
org.quartz.jobStore.clusterCheckinIntervalnolong15000
org.quartz.jobStore.maxMisfiresToHandleAtATimenoint20
org.quartz.jobStore.dontSetAutoCommitFalsenobooleanfalse
org.quartz.jobStore.selectWithLockSQLnostring"SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE"
org.quartz.jobStore.txIsolationLevelSerializablenobooleanfalse
org.quartz.jobStore.acquireTriggersWithinLocknobooleanfalse (or true - see doc below)
org.quartz.jobStore.lockHandler.classnostringnull
org.quartz.jobStore.driverDelegateInitStringnostringnull

org.quartz.jobStore.driverDelegateClass

Driver代表了解不同数据库系统的特定“方言”。可能的选择包括:

  • org.quartz.impl.jdbcjobstore.StdJDBCDelegate(用于完全符合JDBC的驱动程序)
  • org.quartz.impl.jdbcjobstore.MSSQLDelegate(对于Microsoft SQL Server和Sybase)
  • org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
  • org.quartz.impl.jdbcjobstore.WebLogicDelegate(对于WebLogic驱动程序)
  • org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
  • org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate(对于Weblogic中使用的Oracle驱动程序)
  • org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate(对于在Weblogic中使用的Oracle驱动程序)
  • org.quartz.impl.jdbcjobstore.CloudscapeDelegate
  • org.quartz.impl.jdbcjobstore.DB2v6Delegate
  • org.quartz.impl.jdbcjobstore.DB2v7Delegate
  • org.quartz.impl.jdbcjobstore.DB2v8Delegate
  • org.quartz.impl.jdbcjobstore.HSQLDBDelegate
  • org.quartz.impl.jdbcjobstore.PointbaseDelegate
  • org.quartz.impl.jdbcjobstore.SybaseDelegate

请注意,许多数据库已知与StdJDBCDelegate一起工作,而其他数据库与其他数据库的代理人合作,例如Derby与Cloudscape代理(不出意外)工作良好。

org.quartz.jobStore.dataSource

此属性的值必须是配置属性文件中定义的DataSource的名称。有关更多信息,请参阅DataSources配置文档

org.quartz.jobStore.tablePrefix

JDBCJobStore的“表前缀”属性是一个等于在数据库中创建的Quartz表的前缀的字符串。如果使用不同的表前缀,则可以在同一数据库中拥有多组Quartz表。

org.quartz.jobStore.useProperties

“使用属性”标志指示JDBCJobStore,JobDataMaps中的所有值都将是“字符串”,因此可以将其存储为名称 - 值对,而不是以BLOB列的序列化形式存储更复杂的对象。这可以方便,因为您避免了将非String类序列化为BLOB时可能产生的类版本控制问题。

org.quartz.jobStore.misfireThreshold

在被认为“失火”之前,调度程序将“容忍”一个Triggers将其下一个启动时间通过的毫秒数。默认值(如果您在配置中未输入此属性)为60000(60秒)。

org.quartz.jobStore.isClustered

设置为“true”以打开群集功能。如果您有多个Quartz实例使用同一组数据库表,则此属性必须设置为“true”,否则您将遇到破坏。有关详细信息,请参阅集群配置文档。

org.quartz.jobStore.clusterCheckinInterval

设置此实例“检入”*与群集的其他实例的频率(以毫秒为单位)。影响检测失败实例的速度。

org.quartz.jobStore.maxMisfiresToHandleAtATime

在给定的通行证中,工作区将处理的最大错误次数触发。一次处理很多(超过几十打)可能导致数据库表被锁定得足够长,以致可能会阻碍其他(未失败的)Triggers触发的性能。

org.quartz.jobStore.dontSetAutoCommitFalse

将此参数设置为“true”可以告诉Quartz在从DataSource获取的连接上不调用setAutoCommit(false)。这在一些情况下可能会有所帮助,例如,如果您有一个驱动程序,如果它已经关闭时被调用,则会抱怨。此属性默认为false,因为大多数驱动程序要求调用setAutoCommit(false)。

org.quartz.jobStore.selectWithLockSQL

必须是在“LOCKS”表中选择一行并在该行上放置一个锁的SQL字符串。如果未设置,默认值为“SELECT * FROM {0} LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME =?FOR UPDATE“,适用于大多数数据库。在运行时使用上面配置的TABLE_PREFIX替换“{0}”。“{1}”被替换为调度程序的名称。

org.quartz.jobStore.txIsolationLevelSerializable

值“true”表示Quartz(使用JobStoreTX或CMT)在JDBC连接上调用setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE)。这可以有助于防止在高负载下的某些数据库的锁定超时以及“持久”事务。

org.quartz.jobStore.acquireTriggersWithinLock

是否在明确的数据库锁中发生触发下一个Triggers的触发。这曾经是必需的(在以前的Quartz版本中),以避免与特定数据库的死锁,但不再需要,因此默认值为“false”。

如果“org.quartz.scheduler.batchTriggerAcquisitionMaxCount”设置为> 1,并使用JDBC JobStore,则此属性必须设置为“true”以避免数据损坏(从Quartz 2.1.1开始,“true”现在是默认值如果batchTriggerAcquisitionMaxCount设置为> 1)。

org.quartz.jobStore.lockHandler.class

用于生成用于锁定作业存储数据控件的org.quartz.impl.jdbcjobstore.Semaphore实例的类名称。这是一个高级配置功能,大多数用户不应该使用它。默认情况下,Quartz将选择最适合(预捆绑)的Semaphore实现来使用。“org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore” QUARTZ-497可能对MS SQL Server用户很感兴趣。见QUARTZ-441

org.quartz.jobStore.driverDelegateInitString

一个以管道分隔的属性列表(及其值),可以在初始化时间内传递给DriverDelegate。

字符串的格式是这样的:

“settingName = settingValue | otherSettingName = otherSettingValue | ...”

StdJDBCDelegate及其所有后代(Quartz附带的所有代理)都支持一个名为“triggerPersistenceDelegateClasses”的属性,该属性可以设置为实现用于存储自定义Triggers类型的TriggerPersistenceDelegate接口的类的逗号分隔列表。有关为自定义Triggers编写持久性委托的示例,请参阅Java类SimplePropertiesTriggerPersistenceDelegateSupport和SimplePropertiesTriggerPersistenceDelegateSupport。