Quartz配置JDBC-JobStoreTX

2018-09-28 15:03 更新

配置JDBC-JobStoreTX

JDBCJobStore用于在關(guān)系數(shù)據(jù)庫中存儲調(diào)度信息(jobs,Triggers和日歷)。實(shí)際上,您可以選擇兩個獨(dú)立的JDBCJobStore類,具體取決于您需要的事務(wù)性行為。

JobStoreTX通過在每次操作(如添加jobs)后調(diào)用數(shù)據(jù)庫連接上的commit()(或rollback())來管理所有事務(wù)。如果在獨(dú)立應(yīng)用程序中使用Quartz,或者在應(yīng)用程序不使用JTA事務(wù)的情況下,則在Servlet容器中使用JDBCJobStore。

通過設(shè)置“org.quartz.jobStore.class”屬性來選擇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ù)庫系統(tǒng)的特定“方言”??赡艿倪x擇包括:

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

請注意,許多數(shù)據(jù)庫已知與StdJDBCDelegate一起工作,而其他數(shù)據(jù)庫與其他數(shù)據(jù)庫的代理人合作,例如Derby與Cloudscape代理(不出意外)工作良好。

org.quartz.jobStore.dataSource

此屬性的值必須是配置屬性文件中定義的DataSource的名稱。有關(guān)更多信息,請參閱DataSources配置文檔。

org.quartz.jobStore.tablePrefix

JDBCJobStore的“表前綴”屬性是一個等于在數(shù)據(jù)庫中創(chuàng)建的Quartz表的前綴的字符串。如果使用不同的表前綴,則可以在同一數(shù)據(jù)庫中擁有多組Quartz表。

org.quartz.jobStore.useProperties

“使用屬性”標(biāo)志指示JDBCJobStore,JobDataMaps中的所有值都將是“字符串”,因此可以將其存儲為名稱 - 值對,而不是以BLOB列的序列化形式存儲更復(fù)雜的對象。這可以方便,因?yàn)槟苊饬藢⒎荢tring類序列化為BLOB時可能產(chǎn)生的類版本控制問題。

org.quartz.jobStore.misfireThreshold

在被認(rèn)為“失火”之前,調(diào)度程序?qū)ⅰ叭萑獭币粋€Triggers將其下一個啟動時間通過的毫秒數(shù)。默認(rèn)值(如果您在配置中未輸入此屬性)為60000(60秒)。

org.quartz.jobStore.isClustered

設(shè)置為“true”以打開群集功能。如果您有多個Quartz實(shí)例使用同一組數(shù)據(jù)庫表,則此屬性必須設(shè)置為“true”,否則您將遇到破壞。有關(guān)詳細(xì)信息,請參閱集群配置文檔。

org.quartz.jobStore.clusterCheckinInterval

設(shè)置此實(shí)例“檢入”*與群集的其他實(shí)例的頻率(以毫秒為單位)。影響檢測失敗實(shí)例的速度。

org.quartz.jobStore.maxMisfiresToHandleAtATime

在給定的通行證中,工作區(qū)將處理的最大錯誤次數(shù)觸發(fā)。一次處理很多(超過幾十打)可能導(dǎo)致數(shù)據(jù)庫表被鎖定得足夠長,以致可能會阻礙其他(未失敗的)Triggers觸發(fā)的性能。

org.quartz.jobStore.dontSetAutoCommitFalse

將此參數(shù)設(shè)置為“true”可以告訴Quartz在從DataSource獲取的連接上不調(diào)用setAutoCommit(false)。這在一些情況下可能會有所幫助,例如,如果您有一個驅(qū)動程序,如果它已經(jīng)關(guān)閉時被調(diào)用,則會抱怨。此屬性默認(rèn)為false,因?yàn)榇蠖鄶?shù)驅(qū)動程序要求調(diào)用setAutoCommit(false)。

org.quartz.jobStore.selectWithLockSQL

必須是在“LOCKS”表中選擇一行并在該行上放置一個鎖的SQL字符串。如果未設(shè)置,默認(rèn)值為“SELECT * FROM {0} LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME =?FOR UPDATE“,適用于大多數(shù)數(shù)據(jù)庫。在運(yùn)行時使用上面配置的TABLE_PREFIX替換“{0}”?!皗1}”被替換為調(diào)度程序的名稱。

org.quartz.jobStore.txIsolationLevelSerializable

值“true”表示Quartz(使用JobStoreTX或CMT)在JDBC連接上調(diào)用setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE)。這可以有助于防止在高負(fù)載下的某些數(shù)據(jù)庫的鎖定超時以及“持久”事務(wù)。

org.quartz.jobStore.acquireTriggersWithinLock

是否在明確的數(shù)據(jù)庫鎖中發(fā)生觸發(fā)下一個Triggers的觸發(fā)。這曾經(jīng)是必需的(在以前的Quartz版本中),以避免與特定數(shù)據(jù)庫的死鎖,但不再需要,因此默認(rèn)值為“false”。

如果“org.quartz.scheduler.batchTriggerAcquisitionMaxCount”設(shè)置為> 1,并使用JDBC JobStore,則此屬性必須設(shè)置為“true”以避免數(shù)據(jù)損壞(從Quartz 2.1.1開始,“true”現(xiàn)在是默認(rèn)值如果batchTriggerAcquisitionMaxCount設(shè)置為> 1)。

org.quartz.jobStore.lockHandler.class

用于生成用于鎖定作業(yè)存儲數(shù)據(jù)控件的org.quartz.impl.jdbcjobstore.Semaphore實(shí)例的類名稱。這是一個高級配置功能,大多數(shù)用戶不應(yīng)該使用它。默認(rèn)情況下,Quartz將選擇最適合(預(yù)捆綁)的Semaphore實(shí)現(xiàn)來使用?!皁rg.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore” QUARTZ-497可能對MS SQL Server用戶很感興趣。見QUARTZ-441。

org.quartz.jobStore.driverDelegateInitString

一個以管道分隔的屬性列表(及其值),可以在初始化時間內(nèi)傳遞給DriverDelegate。

字符串的格式是這樣的:

“settingName = settingValue | otherSettingName = otherSettingValue | ...”

StdJDBCDelegate及其所有后代(Quartz附帶的所有代理)都支持一個名為“triggerPersistenceDelegateClasses”的屬性,該屬性可以設(shè)置為實(shí)現(xiàn)用于存儲自定義Triggers類型的TriggerPersistenceDelegate接口的類的逗號分隔列表。有關(guān)為自定義Triggers編寫持久性委托的示例,請參閱Java類SimplePropertiesTriggerPersistenceDelegateSupport和SimplePropertiesTriggerPersistenceDelegateSupport。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號