JDBCJobStore用于在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)調(diào)度信息(jobs,Triggers和日歷)。實(shí)際上,您可以選擇兩個(gè)獨(dú)立的JDBCJobStore類,具體取決于您需要的事務(wù)性行為。
JobStoreTX通過(guò)在每次操作(如添加jobs)后調(diào)用數(shù)據(jù)庫(kù)連接上的commit()(或rollback())來(lái)管理所有事務(wù)。如果在獨(dú)立應(yīng)用程序中使用Quartz,或者在應(yīng)用程序不使用JTA事務(wù)的情況下,則在Servlet容器中使用JDBCJobStore。
通過(guò)設(shè)置“org.quartz.jobStore.class”屬性來(lái)選擇JobStoreTX:
將調(diào)度程序的JobStore設(shè)置為JobStoreTX
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
JobStoreTX可以使用以下屬性進(jìn)行調(diào)整:
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代表了解不同數(shù)據(jù)庫(kù)系統(tǒng)的特定“方言”。可能的選擇包括:
請(qǐng)注意,許多數(shù)據(jù)庫(kù)已知與StdJDBCDelegate一起工作,而其他數(shù)據(jù)庫(kù)與其他數(shù)據(jù)庫(kù)的代理人合作,例如Derby與Cloudscape代理(不出意外)工作良好。
org.quartz.jobStore.dataSource
此屬性的值必須是配置屬性文件中定義的DataSource的名稱。有關(guān)更多信息,請(qǐng)參閱DataSources的配置文檔。
org.quartz.jobStore.tablePrefix
JDBCJobStore的“表前綴”屬性是一個(gè)等于在數(shù)據(jù)庫(kù)中創(chuàng)建的Quartz表的前綴的字符串。如果使用不同的表前綴,則可以在同一數(shù)據(jù)庫(kù)中擁有多組Quartz表。
org.quartz.jobStore.useProperties
“使用屬性”標(biāo)志指示JDBCJobStore,JobDataMaps中的所有值都將是“字符串”,因此可以將其存儲(chǔ)為名稱 - 值對(duì),而不是以BLOB列的序列化形式存儲(chǔ)更復(fù)雜的對(duì)象。這可以方便,因?yàn)槟苊饬藢⒎荢tring類序列化為BLOB時(shí)可能產(chǎn)生的類版本控制問(wèn)題。
org.quartz.jobStore.misfireThreshold
在被認(rèn)為“失火”之前,調(diào)度程序?qū)ⅰ叭萑獭币粋€(gè)Triggers將其下一個(gè)啟動(dòng)時(shí)間通過(guò)的毫秒數(shù)。默認(rèn)值(如果您在配置中未輸入此屬性)為60000(60秒)。
org.quartz.jobStore.isClustered
設(shè)置為“true”以打開(kāi)群集功能。如果您有多個(gè)Quartz實(shí)例使用同一組數(shù)據(jù)庫(kù)表,則此屬性必須設(shè)置為“true”,否則您將遇到破壞。有關(guān)詳細(xì)信息,請(qǐng)參閱集群配置文檔。
org.quartz.jobStore.clusterCheckinInterval
設(shè)置此實(shí)例“檢入”*與群集的其他實(shí)例的頻率(以毫秒為單位)。影響檢測(cè)失敗實(shí)例的速度。
org.quartz.jobStore.maxMisfiresToHandleAtATime
在給定的通行證中,工作區(qū)將處理的最大錯(cuò)誤次數(shù)觸發(fā)。一次處理很多(超過(guò)幾十打)可能導(dǎo)致數(shù)據(jù)庫(kù)表被鎖定得足夠長(zhǎng),以致可能會(huì)阻礙其他(未失敗的)Triggers觸發(fā)的性能。
org.quartz.jobStore.dontSetAutoCommitFalse
將此參數(shù)設(shè)置為“true”可以告訴Quartz在從DataSource獲取的連接上不調(diào)用setAutoCommit(false)。這在一些情況下可能會(huì)有所幫助,例如,如果您有一個(gè)驅(qū)動(dòng)程序,如果它已經(jīng)關(guān)閉時(shí)被調(diào)用,則會(huì)抱怨。此屬性默認(rèn)為false,因?yàn)榇蠖鄶?shù)驅(qū)動(dòng)程序要求調(diào)用setAutoCommit(false)。
org.quartz.jobStore.selectWithLockSQL
必須是在“LOCKS”表中選擇一行并在該行上放置一個(gè)鎖的SQL字符串。如果未設(shè)置,默認(rèn)值為“SELECT * FROM {0} LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME =?FOR UPDATE“,適用于大多數(shù)數(shù)據(jù)庫(kù)。在運(yùn)行時(shí)使用上面配置的TABLE_PREFIX替換“{0}”?!皗1}”被替換為調(diào)度程序的名稱。
org.quartz.jobStore.txIsolationLevelSerializable
值“true”表示Quartz(使用JobStoreTX或CMT)在JDBC連接上調(diào)用setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE)。這可以有助于防止在高負(fù)載下的某些數(shù)據(jù)庫(kù)的鎖定超時(shí)以及“持久”事務(wù)。
org.quartz.jobStore.acquireTriggersWithinLock
是否在明確的數(shù)據(jù)庫(kù)鎖中發(fā)生觸發(fā)下一個(gè)Triggers的觸發(fā)。這曾經(jīng)是必需的(在以前的Quartz版本中),以避免與特定數(shù)據(jù)庫(kù)的死鎖,但不再需要,因此默認(rèn)值為“false”。
如果“org.quartz.scheduler.batchTriggerAcquisitionMaxCount”設(shè)置為> 1,并使用JDBC JobStore,則此屬性必須設(shè)置為“true”以避免數(shù)據(jù)損壞(從Quartz 2.1.1開(kāi)始,“true”現(xiàn)在是默認(rèn)值如果batchTriggerAcquisitionMaxCount設(shè)置為> 1)。
org.quartz.jobStore.lockHandler.class
用于生成用于鎖定作業(yè)存儲(chǔ)數(shù)據(jù)控件的org.quartz.impl.jdbcjobstore.Semaphore實(shí)例的類名稱。這是一個(gè)高級(jí)配置功能,大多數(shù)用戶不應(yīng)該使用它。默認(rèn)情況下,Quartz將選擇最適合(預(yù)捆綁)的Semaphore實(shí)現(xiàn)來(lái)使用?!皁rg.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore” QUARTZ-497可能對(duì)MS SQL Server用戶很感興趣。見(jiàn)QUARTZ-441。
org.quartz.jobStore.driverDelegateInitString
一個(gè)以管道分隔的屬性列表(及其值),可以在初始化時(shí)間內(nèi)傳遞給DriverDelegate。
字符串的格式是這樣的:
“settingName = settingValue | otherSettingName = otherSettingValue | ...”
StdJDBCDelegate及其所有后代(Quartz附帶的所有代理)都支持一個(gè)名為“triggerPersistenceDelegateClasses”的屬性,該屬性可以設(shè)置為實(shí)現(xiàn)用于存儲(chǔ)自定義Triggers類型的TriggerPersistenceDelegate接口的類的逗號(hào)分隔列表。有關(guān)為自定義Triggers編寫持久性委托的示例,請(qǐng)參閱Java類SimplePropertiesTriggerPersistenceDelegateSupport和SimplePropertiesTriggerPersistenceDelegateSupport。
更多建議: