quartz.properties配置文件详解
我們通常是通過quartz.properties屬性配置文件(默認情況下均使用該文件)結合StdSchedulerFactory?來使用Quartz的。StdSchedulerFactory?會加載屬性配置文件并實例化一個Scheduler。
?
默認情況下,Quartz會加載classpath下的”quartz.properties”文件作為配置屬性,如果找不到則會使用quartz框架自己jar下org/quartz包底下的”quartz.properties”文件。當然你也可以指定”org.quartz.properties”屬性指向你自定義的屬性配置文件。或者,你也可以在調用StdSchedulerFactory的 getScheduler()方法之前調用 initialize(xx)初始化factory配置。
?
在配置文件中你可以使用”$@”引用其他屬性配置。
?
#============================================================================
#?Configure Main Scheduler Properties 調度器屬性
#============================================================================
# 在集群中每個實例都必須有一個唯一的instanceId,但是應該有一個相同的instanceName【默認“QuartzScheduler”】【非必須】
org.quartz.scheduler.instanceName = MyClusteredScheduler
# Scheduler實例ID,全局唯一,【默認值NON_CLUSTERED】,或者可以使用“SYS_PROP”通過系統屬性設置id。【非必須】
org.quartz.scheduler.instanceId = AUTO
#?只有在”org.quartz.scheduler.instanceId”設置為”AUTO”的時候才使用該屬性設置。
# 默認情況下,“org.quartz.simpl.SimpleInstanceIdGenerator”是基于instanceId和時間戳來自動生成的。
# 其他的id生成器的實現包括 SystemPropertyInstanceIdGenerator 從系統屬性獲取 “org.quartz.scheduler.instanceId”, 和 HostnameInstanceIdGenerator 使用主機名 (InetAddress.getLocalHost().getHostName())。也可以自定義生成方式【默認org.quartz.simpl.SimpleInstanceIdGenerator】【非必須】
#org.quartz.scheduler.instanceIdGenerator.class =?org.quartz.simpl.SimpleInstanceIdGenerator
#?指定線程名,如果不指定的話,會自動使用org.quartz.scheduler.instanceName屬性值加上后綴字符串”_QuartzSchedulerThread”.【默認instanceName+’_QuartzSchedulerThread’】【非必須】
#org.quartz.scheduler.threadName =?
#?指定scheduler的主線程是否為后臺線程,【默認false】【非必須】
#org.quartz.scheduler.makeSchedulerThreadDaemon = false
#?指定Quartz生成的線程是否繼承初始化線程的上下文類加載器。這會影響Quartz的主調度線程、JDBCJobStore的”熄火”處理線程、集群回復線程和線程池里的線程。 將該值設置為“true”可以幫助類加載,JNDI查找,并在應用程序服務器上使用Quartz等相關問題,【默認false】【非必須】
#org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer = false
#?在調度程序空閑的時候,重復查詢是否有可用觸發器的等待時間。通常并不會設置為true,除非你是用XA事務,并且延遲觸發會導致問題的場景。 5000ms以下是不推薦的,因為它會導致過的的數據庫查詢。1000ms以下是非法的?!?strong>默認30000】【非必須】
#org.quartz.scheduler.idleWaitTime =?30000
#?連接超時重試連接的間隔。使用 RamJobStore時,該參數并沒什么用【默認15000】【非必須】
#org.quartz.scheduler.dbFailureRetryInterval = 15000
# 最可靠的方式就是使用【默認”org.quartz.simpl.CascadingClassLoadHelper”】,沒必要指定其他類【非必須】
#org.quartz.scheduler.classLoadHelper.class =?org.quartz.simpl.CascadingClassLoadHelper
# 指定JobFactory的類(接口)名稱。負責實例化jobClass。【默認”org.quartz.simpl.PropertySettingJobFactory”】,只是在job被執行的時候簡單調用newInstance()實例化一個job類。PropertySettingJobFactory 會使用反射機制通過SchedulerContext、 Job、Trigger和 JobDataMaps設置job bean的屬性。在使用JTA事務時,可設置事務相關的屬性【非必須】
#org.quartz.scheduler.jobFactory.class =?org.quartz.simpl.PropertySettingJobFactory
#org.quartz.context.key.SOME_KEY = none
# 設置Quartz能夠加載UserTransaction換利器的JNDI的 URL。Websphere 的用戶可能會設置為“jta/usertransaction。只有在Quartz使用JobStoreCMT的時候,才會使用該屬性,并且org.quartz.scheduler.wrapJobExecutionInUserTransaction也會設置為true。默認【默認值是”java:comp/UserTransaction”】【非必須】
#org.quartz.scheduler.userTransactionURL =?java:comp/UserTransaction
#?如果想使用Quartz在執行一個job前使用UserTransaction,則應該設置該屬性為true。job執行完、在JobDataMap改變之后事務會提交。默認值是false。 可以在你的job類中使用 @ExecuteInJTATransaction注解, 可以控制job是否使用事務?!?strong>默認false】【非必須】
#org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
# 建議設置為“org.terracotta.quartz.skipUpdateCheck=true”不會在程序運行中還去檢查quartz是否有版本更新?!灸Jfalse】【非必須】
#org.quartz.scheduler.skipUpdateCheck?=?true
# 許調度程序一次性觸發的觸發器數量。.默認值是1。值越大一次性觸發的任務就可以越多,但是在集群環境【非必須】下,不建議設置為很大值。如果值 > 1, 并且使用了 JDBC JobStore的話, org.quartz.jobStore.acquireTriggersWithinLock屬性必須設置為true,以避免”弄臟”數據?!灸J1】
#org.quartz.scheduler.batchTriggerAcquisitionMaxCount = 1
# 允許觸發器被獲取并在其預定的觸發時間之前觸發的數量?!?strong>默認0】【非必須】
#org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow = 0
?
#============================================================================
#?Configure ThreadPool 線程池屬性
#============================================================================
# 線程池的實現類(定長線程池,幾乎可滿足所有用戶的需求)【默認null】【必須】
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
# 指定線程數,至少為1(無默認值)(一般設置為1-100直接的整數合適)【默認-1】【必須】
org.quartz.threadPool.threadCount = 25
# 設置線程的優先級(最大為java.lang.Thread.MAX_PRIORITY 10,最小為Thread.MIN_PRIORITY 1)【默認Thread.NORM_PRIORITY (5)】【非必須】
org.quartz.threadPool.threadPriority = 5
?
# ------------------設置SimpleThreadPool的一些屬性,一般使用默認值-------------------------------
# 設置是否為守護線程
#org.quartz.threadpool.makethreadsdaemons = false
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#org.quartz.threadpool.threadsinheritgroupofinitializingthread = false
#線程前綴默認值是:[Scheduler Name]_Worker
#org.quartz.threadpool.threadnameprefix = swhJobThead;
?
# ------------------------配置全局監聽(TriggerListener,JobListener) 則應用程序可以接收和執行 預定的事件通知
# Configuring a Global TriggerListener 配置全局的Trigger監聽器。
# MyTriggerListenerClass 類必須有一個無參數的構造函數,和 屬性的set方法,目前2.2.x只支持原始數據類型的值(包括字符串)
#org.quartz.triggerListener.NAME.class = com.swh.MyTriggerListenerClass
#org.quartz.triggerListener.NAME.propName = propValue
#org.quartz.triggerListener.NAME.prop2Name = prop2Value
# Configuring a Global JobListener 配置全局的Job監聽器
# MyJobListenerClass 類必須有一個無參數的構造函數,和 屬性的set方法,目前2.2.x只支持原始數據類型的值(包括字符串)
#org.quartz.jobListener.NAME.class = com.swh.MyJobListenerClass
#org.quartz.jobListener.NAME.propName = propValue
#org.quartz.jobListener.NAME.prop2Name = prop2Value
?
#============================================================================
#?Configure JobStore?配置數據存儲的方式
#============================================================================
# ------------------------使用RAMJobStore配置
# 將schedule相關信息保存在RAM中,輕量級,速度快,遺憾的是應用重啟時相關信息都將丟失。
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#?最大能忍受的觸發超時時間(觸發器被認定為“misfired”之前),如果超過則認為“失誤”【默認60秒】
org.quartz.jobStore.misfireThreshold = 60000
?
# ------------------------使用JDBCJobStore配置
# 所有的quartz數據例如job和Trigger的細節信息被保存在內存或數據庫中,有兩種實現:JobStoreTX(自己管理事務)和JobStoreCMT(application server管理事務,即全局事務JTA)
org.quartz.jobStore.class =?org.quartz.impl.jdbcjobstore.JobStoreTX
#?最大能忍受的觸發超時時間(觸發器被認定為“misfired”之前),如果超過則認為“失誤”【默認60秒】
org.quartz.jobStore.misfireThreshold = 60000
#?類似于Hibernate的dialect,用于處理DB之間的差異,StdJDBCDelegate能滿足大部分的DB
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# 配置數據源的名稱,在后面配置數據源的時候要用到,例如org.quartz.dataSource.clusterDS.driver =?com.mysql.jdbc.Driver
org.quartz.jobStore.dataSource = clusterDS
# 數據表前綴
?org.quartz.jobStore.tablePrefix = QRTZ_
#?為了指示JDBCJobStore所有的JobDataMaps中的值都是字符串,并且能以“名字-值”對的方式存儲而不是以復雜對象的序列化形式存儲在BLOB字段中,應該設置為true(缺省方式)
org.quartz.jobStore.useProperties = true
# 是否集群、負載均衡、容錯,如果應用在集群中設置為false會出錯
org.quartz.jobStore.isClustered = true
# 檢入到數據庫中的頻率(毫秒)。檢查是否其他的實例到了應當檢入的時候未檢入這能指出一個失敗的實例,且當前Scheduler會以此來接管執行失敗并可恢復的Job通過檢入操作,Scheduler也會更新自身的狀態記錄
org.quartz.jobStore.clusterCheckinInterval = 20000
#?jobStore處理未按時觸發的Job的數量
#org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
#?true/false,true則調用connection的setAutoCommit(false)方法
org.quartz.jobStore.dontSetAutoCommitFalse = true
#?加鎖的SQL語句,默認為SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
# {0}=$@org.quartz.jobStore.tablePrefix
org.quartz.jobStore.selectWithLockSQL = false
#?true/false, true則調用connection的setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) 方法
org.quartz.jobStore.txIsolationLevelSerializable = false
#?觸發job時是否需要擁有鎖
org.quartz.jobStore.acquireTriggersWithinLock = true
# 用于管理數據庫中相關信息的鎖機制的類名
org.quartz.jobStore.lockHandler.class =?
?
#============================================================================
#?Configure?Datasources 數據源
#============================================================================
# ------------------------使用常規數據源配置
# 數據庫驅動
org.quartz.dataSource.NAME.driver = com.mysql.jdbc.Driver
# 數據庫連接地址
org.quartz.dataSource.NAME.URL = jdbc:mysql://${mysql.address}/etc-quartz?useUnicode=true&characterEncoding=utf8
# 數據庫用戶名
org.quartz.dataSource.NAME.user = ${mysql.user}
# 數據庫密碼
org.quartz.dataSource.NAME.password = ${mysql.password}
# 數據庫最大連接數(如果Scheduler很忙,比如執行的任務與線程池的數量差不多相同,那就需要配置DataSource的連接數量為線程池數量+1)
org.quartz.dataSource.NAME.maxConnections = 30
#?dataSource用于檢測connection是否failed/corrupt的SQL語句
org.quartz.dataSource.NAME.validationQuery=select RAND()
?
# ------------------------使用JNDI數據源配置
# JNDI URL
org.quartz.dataSource.NAME.jndiURL =?
# JNDI InitialContextFactory
org.quartz.dataSource.NAME.java.naming.factory.initial =?
# 后三行為連接到JNDI提供者的相關信息
org.quartz.dataSource.NAME.java.naming.provider.url =?
org.quartz.dataSource.NAME.java.naming.security.principal?=?
org.quartz.dataSource.NAME.java.naming.security.credentials?=?
?
# ------------------------用戶自定義org.quartz.utils.ConnectionProvider實現類
org.quartz.dataSource.NAME.connectionProvider.class =?
org.quartz.dataSource.NAME.XXX =?
-----------
實現故障處理和負載均衡,實現高可用性和擴展性通過共享DB Tables實現,所以必須使用JDBC-Jobstore
負載均衡 :?誰先觸發誰執行,并且一次只有一個scheduler觸發
故障處理 :?當一個scheduler失敗后,其它的實例可以發現那些執行失敗的Jobs,假如Job對應的JobDetail標記為recovery(屬性"requests recovery"),那么該Job就會被其它的實例重新執行,否則對應的Job只會被釋放等待下次被觸發。
實現:
org.quartz.jobStore.isClustered = true
所有的實例的quartz.properties文件除了org.quartz.scheduler.instanceId和org.quartz.threadPool.threadCount必須一致,org.quartz.scheduler.instanceId = AUTO 即可實現ID的不一致
注意:
1.不在不同的機器上實現集群功能,除非他們的時鐘同步精確到秒
2.不實現集群的實例不使用同一套表
#============================================================================
#?Configure?Plugins 插件配置
#============================================================================
#?配置trigger執行歷史日志(可以看到類的文檔和參數列表)
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
?
#?加載 Job 和 Trigger 信息的類 (1.8之前用:org.quartz.plugins.xml.JobInitializationPlugin)
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
#?指定存放調度器(Job 和 Trigger)信息的xml文件,默認是classpath下quartz_jobs.xml
#org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#?覆蓋任務調度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情況
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
# 自動掃描任務單并發現改動的時間間隔,單位為秒。設置為0表示不自動加載
org.quartz.plugin.jobInitializer.scanInterval = 120
# 覆蓋任務調度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情況
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
?
?
# ===========================================================================??
#?Sample configuration of ShutdownHookPlugin? ShutdownHookPlugin插件的配置樣例
# ===========================================================================
#org.quartz.plugin.shutdownhook.class = \org.quartz.plugins.management.ShutdownHookPlugin
#org.quartz.plugin.shutdownhook.cleanShutdown = true
# Configure RMI Settings 遠程服務調用配置
# 如果你想quartz-scheduler出口本身通過RMI作為服務器,然后設置“出口”標志true(默認值為false)。
#org.quartz.scheduler.rmi.export = false
# 主機上rmi注冊表(默認值localhost)
#org.quartz.scheduler.rmi.registryhost = localhost
# 注冊監聽端口號(默認值1099)
#org.quartz.scheduler.rmi.registryport = 1099
# 創建rmi注冊,false/never:如果你已經有一個在運行或不想進行創建注冊
# true/as_needed:第一次嘗試使用現有的注冊,然后再回來進行創建
# always:先進行創建一個注冊,然后再使用回來使用注冊
#org.quartz.scheduler.rmi.createregistry = never
#Quartz Scheduler服務端端口,默認是隨機分配RMI注冊表
#org.quartz.scheduler.rmi.serverport = 1098
# true:鏈接遠程服務調度(客戶端),這個也要指定registryhost和registryport,默認為false
# 如果export和proxy同時指定為true,則export的設置將被忽略
?
# ===========================================================================
# Configuring a Global TriggerListener 配置全局的Trigger監聽器
# MyTriggerListenerClass 類必須有一個無參數的構造函數,和 屬性的set方法,目前2.2.x只支持原始數據類型的值(包括字符串)
# ===========================================================================
#org.quartz.triggerListener.NAME.class = com.swh.MyTriggerListenerClass
#org.quartz.triggerListener.NAME.propName = propValue
#org.quartz.triggerListener.NAME.prop2Name = prop2Value
# ===========================================================================
# Configuring a Global JobListener 配置全局的Job監聽器
# MyJobListenerClass 類必須有一個無參數的構造函數,和 屬性的set方法,目前2.2.x只支持原始數據類型的值(包括字符串)
# ===========================================================================
#org.quartz.jobListener.NAME.class = com.swh.MyJobListenerClass
#org.quartz.jobListener.NAME.propName = propValue
#org.quartz.jobListener.NAME.prop2Name = prop2Value
?
僅供參考
總結
以上是生活随笔為你收集整理的quartz.properties配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中几个主流的数据库连接池
- 下一篇: 创建Maven项目时,GroupId和A