Quartz配置JDBC-JobStoreTX

2018-09-28 15:03 更新

配置JDBC-JobStoreTX

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 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代表了解不同數(shù)據(jù)庫(kù)系統(tǒng)的特定“方言”。可能的選擇包括:

  • org.quartz.impl.jdbcjobstore.StdJDBCDelegate(用于完全符合JDBC的驅(qū)動(dòng)程序)
  • org.quartz.impl.jdbcjobstore.MSSQLDelegate(對(duì)于Microsoft SQL Server和Sybase)
  • org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
  • org.quartz.impl.jdbcjobstore.WebLogicDelegate(對(duì)于WebLogic驅(qū)動(dòng)程序)
  • org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
  • org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate(對(duì)于Weblogic中使用的Oracle驅(qū)動(dòng)程序)
  • org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate(對(duì)于在Weblogic中使用的Oracle驅(qū)動(dòng)程序)
  • 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

請(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。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)