JDBCJobStore用于在關系數(shù)據庫中存儲調度信息(Jobs,Triggers和calendars)。實際上,您可以選擇兩個獨立的JDBCJobStore類,具體取決于您需要的事務性行為。
JobStoreCMT依賴于正在使用Quartz的應用程序管理的事務。在嘗試安排(或取消調度)jobs/Triggers之前,JTA事務必須進行中。這使得調度的“工作”成為應用程序“較大”事務的一部分。JobStoreCMT實際上需要使用兩個數(shù)據源,一個是由應用程序服務器(通過JTA)管理的連接的事務,另一個數(shù)據源具有不參與全局(JTA)事務的連接。當應用程序使用JTA事務(例如通過EJB會話Bean)來執(zhí)行其工作時,JobStoreCMT是適當?shù)摹?/p>
通過設置“org.quartz.jobStore.class”屬性來選擇JobStore:
將計劃程序的JobStore設置為JobStoreCMT
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT
JobStoreCMT可以使用以下屬性進行調整:
Property Name | Required | Type | Default Value |
---|---|---|---|
org.quartz.jobStore.driverDelegateClass | yes | string | null |
org.quartz.jobStore.dataSource | yes | string | null |
org.quartz.jobStore.nonManagedTXDataSource | 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.dontSetNonManagedTXConnectionAutoCommitFalse | 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.txIsolationLevelReadCommitted | 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 delegates 了解不同數(shù)據庫系統(tǒng)的特定“dialects”??赡艿倪x擇包括:
請注意,許多數(shù)據庫已知與StdJDBCDelegate一起工作,而其他數(shù)據庫與其他數(shù)據庫的代理人合作,例如Derby與Cloudscape代理(不出意外)工作良好。
org.quartz.jobStore.dataSource
此屬性的值必須是配置屬性文件中定義的DataSource的名稱。對于JobStoreCMT,需要該DataSource包含能夠參與JTA(例如容器管理的)事務的連接。這通常意味著DataSource將在應用程序服務器內部進行配置和維護,Quartz將通過JNDI獲得一個句柄。有關更多信息,請參閱DataSources的配置文檔。
org.quartz.jobStore.nonManagedTXDataSource
JobStoreCMT 需要一個(第二個)數(shù)據源,其中包含不會是容器管理事務的一部分的連接。此屬性的值必須是配置屬性文件中定義的DataSource的名稱。此數(shù)據源必須包含非CMT連接,或換句話說,Quartz直接調用commit()和rollback()的合法連接。
org.quartz.jobStore.tablePrefix
JDBCJobStore的“表前綴”屬性是一個等于在數(shù)據庫中創(chuàng)建的Quartz表的前綴的字符串。如果使用不同的表前綴,則可以在同一數(shù)據庫中擁有多組Quartz表。
org.quartz.jobStore.useProperties
“使用屬性”標志指示JDBCJobStore,JobDataMaps中的所有值都將是“字符串”,因此可以將其存儲為名稱 - 值對,而不是以BLOB列的序列化形式存儲更復雜的對象。這可以方便,因為您避免了將非String類序列化為BLOB時可能產生的類版本控制問題。
org.quartz.jobStore.misfireThreshold
在被認為“misfired”之前,調度程序將“tolerate”一個Triggers將其下一個啟動時間通過的毫秒數(shù)。默認值(如果您在配置中未輸入此屬性)為60000(60秒)。
org.quartz.jobStore.isClustered
設置為“true”以打開群集功能。如果您有多個Quartz實例使用同一組數(shù)據庫表,則此屬性必須設置為“true”,否則您將遇到破壞。
org.quartz.jobStore.clusterCheckinInterval
設置此實例“檢入”*與群集的其他實例的頻率(以毫秒為單位)。影響檢測失敗實例的速度。
org.quartz.jobStore.maxMisfiresToHandleAtATime
在給定的通行證中,工作區(qū)將處理的最大錯誤次數(shù)觸發(fā)。一次處理很多(超過幾十打)可能導致數(shù)據庫表被鎖定得足夠長,以致可能會阻礙其他(未失敗的)Triggers觸發(fā)的性能。
org.quartz.jobStore.dontSetAutoCommitFalse
將此參數(shù)設置為“true”可以告訴Quartz 在從DataSource獲取的連接上不調用setAutoCommit(false)。這在一些情況下可能會有所幫助,例如,如果您有一個驅動程序,如果它已經關閉時被調用,則會抱怨。此屬性默認為false,因為大多數(shù)驅動程序要求調用setAutoCommit(false)。
org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse
與屬性org.quartz.jobStore.dontSetAutoCommitFalse相同,但它適用于非ManagedTXDataSource。
org.quartz.jobStore.selectWithLockSQL
必須是在“LOCKS”表中選擇一行并在該行上放置一個鎖的SQL字符串。如果未設置,默認值為“SELECT * FROM {0} LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME =?FOR UPDATE“,適用于大多數(shù)數(shù)據庫。在運行時使用上面配置的TABLE_PREFIX替換“{0}”?!皗1}”被替換為調度程序的名稱。
org.quartz.jobStore.txIsolationLevelSerializable
值“true”告訴Quartz 在JDBC連接上調用setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE)。這可以有助于防止在高負載下的某些數(shù)據庫的鎖定超時以及“持久”事務。
org.quartz.jobStore.txIsolationLevelReadCommitted
當設置為“true”時,此屬性告訴Quartz 在非托管JDBC連接上調用setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED)。這有助于防止在高負載下的某些數(shù)據庫(如DB2)和“持久”事務的鎖超時。
org.quartz.jobStore.acquireTriggersWithinLock
是否在明確的數(shù)據庫鎖中發(fā)生觸發(fā)下一個Triggers的觸發(fā)。這曾經是必需的(在以前的Quartz版本中),以避免與特定數(shù)據庫的死鎖,但不再需要,因此默認值為“false”。
如果“org.quartz.scheduler.batchTriggerAcquisitionMaxCount”設置為> 1,并使用JDBC JobStore,則此屬性必須設置為“true”以避免數(shù)據損壞(從Quartz 2.1.1開始,“true”現(xiàn)在是默認值如果batchTriggerAcquisitionMaxCount設置為> 1)。
org.quartz.jobStore.lockHandler.class
用于生成用于鎖定作業(yè)存儲數(shù)據控件的org.quartz.impl.jdbcjobstore.Semaphore實例的類名稱。這是一個高級配置功能,大多數(shù)用戶不應該使用它。默認情況下,Quartz將選擇最適合(預捆綁)的Semaphore實現(xiàn)來使用。“org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore” QUARTZ-497可能對MS SQL Server用戶很感興趣。與Quartz捆綁在一起的“JTANonClusteredSemaphore”可以在使用JobStoreCMT時提高性能,盡管它是一個實驗性實現(xiàn)。參見QUARTZ-441和QUARTZ-442
org.quartz.jobStore.driverDelegateInitString
一個以管道分隔的屬性列表(及其值),可以在初始化時間內傳遞給DriverDelegate。
字符串的格式是這樣的:
“settingName = settingValue | otherSettingName = otherSettingValue | ...”
StdJDBCDelegate及其所有后代(Quartz附帶的所有代理)都支持一個名為“triggerPersistenceDelegateClasses”的屬性,該屬性可以設置為實現(xiàn)用于存儲自定義觸發(fā)器類型的TriggerPersistenceDelegate接口的類的逗號分隔列表。有關為自定義Triggers編寫持久性委托的示例,請參閱Java類SimplePropertiesTriggerPersistenceDelegateSupport和SimplePropertiesTriggerPersistenceDelegateSupport。
更多建議: