Quartz配置JDBC-JobStoreTX
配置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 Name | Required | Type | Default Value |
---|---|---|---|
org.quartz.jobStore.driverDelegateClass | yes | string | null |
org.quartz.jobStore.dataSource | yes | string | null |
org.quartz.jobStore.tablePrefix | no | string | "QRTZ_" |
org.quartz.jobStore.useProperties | no | boolean | false |
org.quartz.jobStore.misfireThreshold | no | int | 60000 |
org.quartz.jobStore.isClustered | no | boolean | false |
org.quartz.jobStore.clusterCheckinInterval | no | long | 15000 |
org.quartz.jobStore.maxMisfiresToHandleAtATime | no | int | 20 |
org.quartz.jobStore.dontSetAutoCommitFalse | no | boolean | false |
org.quartz.jobStore.selectWithLockSQL | no | string | "SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE" |
org.quartz.jobStore.txIsolationLevelSerializable | no | boolean | false |
org.quartz.jobStore.acquireTriggersWithinLock | no | boolean | false (or true - see doc below) |
org.quartz.jobStore.lockHandler.class | no | string | null |
org.quartz.jobStore.driverDelegateInitString | no | string | null |
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。