我們通常是通過quartz.properties屬性配置文件(默認情況下均使用該文件)結合StdSchedulerFactory 來使用Quartz的。StdSchedulerFactory 會加載屬性配置文件並實例化一個Scheduler。
默認情況下,Quartz會加載classpath下的”quartz.properties”文件作為配置屬性,如果找不到則會使用quartz框架自己jar下org/quartz包底下的”quartz.properties”文件。當然你也可以指定”org.quartz.properties”屬性指向你自定義的屬性配置文件。或者,你也可以在調用StdSchedulerFactory的 getScheduler()方法之前調用 initialize(xx)初始化factory配置。
主調度程序Scheduler的配置
參數名 是否必須 類型 默認值
org.quartz.scheduler.instanceName N string 'QuartzScheduler'
org.quartz.scheduler.instanceId N string 'NON_CLUSTERED'
org.quartz.scheduler.instanceIdGenerator.class N string (class name) org.quartz.simpl.SimpleInstanceIdGenerator
org.quartz.scheduler.threadName N string instanceName+'_QuartzSchedulerThread'
org.quartz.scheduler.makeSchedulerThreadDaemon N boolean false
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer N boolean false
org.quartz.scheduler.idleWaitTime N string 30000
org.quartz.scheduler.dbFailureRetryInterval N long 15000
org.quartz.scheduler.classLoadHelper.class N string (class name) org.quartz.simpl.CascadingClassLoadHelper
org.quartz.scheduler.jobFactory.class N string (class name) org.quartz.simpl.PropertySettingJobFactory
org.quartz.context.key.SOME_KEY N string none
org.quartz.scheduler.userTransactionURL N string (url) 'java:comp/UserTransaction'
org.quartz.scheduler.wrapJobExecutionInUserTransaction N boolean false
org.quartz.scheduler.skipUpdateCheck N boolean false
org.quartz.scheduler.batchTriggerAcquisitionMaxCount N int 1
org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow N long 0
org.quartz.scheduler.instanceName
使用StdSchedulerFactory的 getScheduler()方法創建的scheduler實例名稱,在同一個程序中可以根據該名稱來區分scheduler。如果實在集群環境中使用,你必須使用同一個名稱——集群環境下”邏輯”相同的scheduler。
org.quartz.scheduler.instanceId
scheduler實例的標志id,必須是全局唯一的,即使在集群環境中”邏輯”相同的scheduler。 或者可以使用“SYS_PROP”通過系統屬性設置id。
org.quartz.scheduler.instanceIdGenerator.class
只有在”org.quartz.scheduler.instanceId”設置為”AUTO”的時候才使用該屬性設置。默認情況下,“org.quartz.simpl.SimpleInstanceIdGenerator”是基於instanceId和時間戳來自動生成的。其他的id生成器的實現包括 SystemPropertyInstanceIdGenerator 從系統屬性獲取 “org.quartz.scheduler.instanceId”, 和 HostnameInstanceIdGenerator 使用主機名 (InetAddress.getLocalHost().getHostName())。你也可以自定義生成方式哦。
org.quartz.scheduler.threadName
指定線程名,如果不指定的話,會自動使用org.quartz.scheduler.instanceName屬性值加上后綴字符串”_QuartzSchedulerThread”.
org.quartz.scheduler.makeSchedulerThreadDaemon
指定scheduler的主線程是否為后台線程。
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer
指定Quartz生成的線程是否繼承初始化線程的上下文類加載器。這會影響Quartz的主調度線程、JDBCJobStore的”熄火”處理線程、集群回復線程和線程池里的線程。 將該值設置為“true”可以幫助類加載,JNDI查找,並在應用程序服務器上使用Quartz等相關問題。
org.quartz.scheduler.idleWaitTime
在調度程序空閑的時候,重復查詢是否有可用觸發器的等待時間。通常並不會設置為true,除非你是用XA事務,並且延遲觸發會導致問題的場景。 5000ms以下是不推薦的,因為它會導致過的的數據庫查詢。1000ms以下是非法的。
org.quartz.scheduler.dbFailureRetryInterval
連接超時重試連接的間隔。使用 RamJobStore時,該參數並沒什么用。
org.quartz.scheduler.classLoadHelper.class
默認最可靠的方式就是指定”org.quartz.simpl.CascadingClassLoadHelper”,沒必要指定其他類。
org.quartz.scheduler.jobFactory.class
指定JobFactory的類(接口)名稱。負責實例化jobClass。默認是”org.quartz.simpl.PropertySettingJobFactory”,只是在job被執行的時候簡單調用newInstance()實例化一個job類。PropertySettingJobFactory 會使用反射機制通過SchedulerContext、 Job、Trigger和 JobDataMaps設置job bean的屬性。
使用JTA事務時,可以設置事務相關的屬性
org.quartz.scheduler.userTransactionURL
設置Quartz能夠加載UserTransaction換利器的JNDI的 URL。默認值是”java:comp/UserTransaction”。Websphere 的用戶可能會設置為“jta/usertransaction。只有在Quartz使用JobStoreCMT的時候,才會使用該屬性,並且org.quartz.scheduler.wrapJobExecutionInUserTransaction也會設置為true。
org.quartz.scheduler.wrapJobExecutionInUserTransaction
如果想使用Quartz在執行一個job前使用UserTransaction,則應該設置該屬性為true。job執行完、在JobDataMap改變之后事務會提交。默認值是false。 可以在你的job類中使用 @ExecuteInJTATransaction注解, 可以控制job是否使用事務。
org.quartz.scheduler.skipUpdateCheck
建議設置為“org.terracotta.quartz.skipUpdateCheck=true”不會在程序運行中還去檢查quartz是否有版本更新。
org.quartz.scheduler.batchTriggerAcquisitionMaxCount
允許調度程序一次性觸發的觸發器數量。.默認值是1。值越大一次性觸發的任務就可以越多,但是在集群環境下,不建議設置為很大值。如果值 > 1, 並且使用了 JDBC JobStore的話, org.quartz.jobStore.acquireTriggersWithinLock屬性必須設置為true,以避免”弄臟”數據。
org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow
允許觸發器被獲取並在其預定的觸發時間之前觸發的數量。默認值0。
Quartz線程池的配置
參數名 是否必須 類型 默認值
org.quartz.threadPool.class Y string (class name) null
org.quartz.threadPool.threadCount Y string -1
org.quartz.threadPool.threadPriority N int Thread.NORM_PRIORITY (5)
org.quartz.threadPool.class
線程池的名字。可以使用后Quartz 的 “org.quartz.simpl.SimpleThreadPool”。
org.quartz.threadPool.threadCount
指定線程數量。一般1-100足以滿足你的應用需求了。
org.quartz.threadPool.threadPriority
線程優先級,Thread.MIN_PRIORITY (1) and Thread.MAX_PRIORITY (10)之間,默認Thread.NORM_PRIORITY (5)。
監聽器的配置
全局觸發器的監聽器配置:
org.quartz.triggerListener.NAME.class = com.foo.MyListenerClass
org.quartz.triggerListener.NAME.propName = propValue
org.quartz.triggerListener.NAME.prop2Name = prop2Value
全局job的監聽器配置:
org.quartz.jobListener.NAME.class = com.foo.MyListenerClass
org.quartz.jobListener.NAME.propName = propValue
org.quartz.jobListener.NAME.prop2Name = prop2Value
jobStore的配置
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
或者
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT
或者
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
數據源的配置
org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@10.0.1.23:1521:demodb
org.quartz.dataSource.myDS.user = myUser
org.quartz.dataSource.myDS.password = myPassword
org.quartz.dataSource.myDS.maxConnections = 30
從一個應用服務中獲取數據源配置:
org.quartz.dataSource.myOtherDS.jndiURL=jdbc/myDataSource
org.quartz.dataSource.myOtherDS.java.naming.factory.initial=com.evermind.server.rmi.RMIInitialContextFactory
org.quartz.dataSource.myOtherDS.java.naming.provider.url=ormi://localhost
org.quartz.dataSource.myOtherDS.java.naming.security.principal=admin
org.quartz.dataSource.myOtherDS.java.naming.security.credentials=123
集群配置
#==============================================================
#Configure Main Scheduler Properties
#配置文件KEY說明參考:org.quartz.impl.StdSchedulerFactory
#默認配置文件名:quartz.properties,如果未放入配置,則使用org/quartz/quartz.properties
#==============================================================
#調度器實例名稱,默認值:QuartzScheduler
org.quartz.scheduler.instanceName = quartzScheduler
#調度器實例編號自動生成,默認值:NON_CLUSTERED,可設置值:AUTO
org.quartz.scheduler.instanceId = AUTO
#==============================================================
#Configure ThreadPool
#==============================================================
#線程池實現類
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
#執行最大並發線程數量
org.quartz.threadPool.threadCount = 5
#線程優先級
org.quartz.threadPool.threadPriority = 5
#==============================================================
#Configure JobStore
#==============================================================
#持久化方式配置
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#持久化方式配置數據驅動,標准數據庫(如MYSQL)
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#quartz相關數據表前綴名
org.quartz.jobStore.tablePrefix = QRTZ_
#開啟分布式部署
org.quartz.jobStore.isClustered = true
#分布式節點有效性檢查時間間隔,單位:毫秒
org.quartz.jobStore.clusterCheckinInterval = 10000
#配置數據源
org.quartz.jobStore.dataSource = myDS
#==============================================================
#Configure DataSource
#==============================================================
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://127.0.0.1:3306/51token2?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = tangqun
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery=select 0 from dual