八. 配置 JobStoreTX JobStore
你可以像下面那样设定类名来选择 JobStoreTX 类:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
表 A.4 列出了配置 Quartz JobStore 的可用属性。只有少数几个属性是必须的,而且其他的都有合理的默认值。
名称 | 必须 | 类型 | 默认值 | |
org.quartz.jobStore.driverDelegateClass | 是 | String | null | |
org.quartz.jobStore.dataSource | 是 | String | null | |
org.quartz.jobStore.tablePrefix | 否 | String | QRTZ_ | |
org.quartz.jobStore.useProperties | 否 | Boolean | false | |
org.quartz.jobStore.misfireThreshold | 否 | Integer | 60000 | |
org.quartz.jobStore.isClustered | 否 | Boolean | false | |
org.quartz.jobStore.clusterCheckinInterval | 否 | Long | 15000 | |
org.quartz.jobStore.maxMisfiresToHandleAtATime | 否 | Integer | 20 | |
org.quartz.jobStore.dontSetAutoCommitFalse | 否 | Boolean | false | |
org.quartz.jobStore.selectWithLockSQL | 否 | String | "SELECT * FROM {0} LOCKS WHERE LOCK_NAME = ? FOR UPDATE" | |
org.quartz.jobStore.txIsolationLevelSerializable | 否 | Boolean | false |
·org.quartz.jobStore.driverDelegateClass
Quartz 通过一个代理可以使用大部分流行的数据库平台。这里是 org.quartz.jobStore.driverDelegateClass 属性允许的值:
·org.quartz.impl.jdbcjobstore.StdJDBCDelegate
·org.quartz.impl.jdbcjobstore.MSSQLDelegate
·org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
·org.quartz.impl.jdbcjobstore.WebLogicDelegate (for WebLogic drivers)
·org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
·org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate
·org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
·org.quartz.impl.jdbcjobstore.CloudscapeDelegate
·org.quartz.impl.jdbcjobstore.DB2v6Delegate
·org.quartz.impl.jdbcjobstore.DB2v7Delegate
·org.quartz.impl.jdbcjobstore.HSQLDBDelegate
·org.quartz.impl.jdbcjobstore.PointbaseDelegate
·org.quartz.jobStore.dataSource
这个属性的值必须是本附录接下来的 DataSource 配置中定义的 DataSource 的名称。
·org.quartz.jobStore.tablePrefix
表前缀属性是作为在你的数据库中创建 Quartz 表的表名的前缀。如果你使用不同的表前缀,你就能够在同一个数据库中拥有多套 Quartz 表。
·org.quartz.jobStore.useProperties
"使用属性" 设置指示着 JDBC JobStore 所有在 JobDataMap 中的值会是字符串,因此,它们可以名-值对来存储,而无需把更复杂的对象以序列化的形式存储在 BLOB 列中。这样做很有好处的,因为避免了伴随着序列化非字符串类到 BLOB 时产生的类版本问题。
·org.quartz.jobStore.misfireThreshold
设定这个属性为一个毫秒数,Scheduler 允许一个 Triiger 在超过它的下次触发时多少毫秒才算是错过触发。默认值是 60000 (60 秒)。
·org.quartz.jobStore.isClustered
设置为 true 来打开集群特性。假如你正使用多个 Quartz 实例且用的是同一套数据库表的话,这个属性必须设置为 true。
·org.quartz.jobStore.clusterCheckinInterval
设置当前实例检查集群中的其他实例的频度 (毫秒)。这个值会影响侦测失败实例的灵敏性。
·org.quartz.jobStore.maxMisfiresToHandleAtATime
这是设定 JobStore 同一时刻能处理错过触发 Trigger 的最大数量。一次同时处理太多(超过数十个)的话,会导致数据库表被锁定过长的时间,从而影响到了触发其他的(还未错过触发) Trigger 的性能。
·org.quartz.jobStore.dontSetAutoCommitFalse
设置这一参数为 true 是告诉 Quartz 别调用从 DataSource 处获取的连接的 setAutoCommit(false) 方法。这在一些情况下是有帮助的,比如可能你有某个驱动在连接关闭的时候是不允许调用该方法的。这个属性默认为 false,因为多数驱动是需要调用 setAutoCommit(false) 方法的。
·org.quartz.jobStore.selectWithLockSQL
这必须为一个 SQL 字符串,用来从 LOCKS 表中查询一条记录并在其中加锁。倘若未予设置,默认为 SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE, 这可在多数数据库中正常工作。{0} 会在运行时替代为你早先配置的 TABLE_PREFIX 属性。
·org.quartz.jobStore.txIsolationLevelSerializable
值为 true 是告诉 Quartz (当使用 JobStoreTX 或是 CMT 的时候) 去调用 JDBC 连接的 setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) 方法。这对于避免某些数据库在高负载及长事物发生时的锁超时是有帮助的。