詳細步驟如下:
1、 按照Quartz集群工作原理
圖:表示了每個節點直接與數據庫通信,若離開數據庫將對其他節點一無所知
在數據庫中建表。建表模版在Quartz包下docs/dbTables下,選擇相應的數據庫和版本即可。DB2_V8的11個Table列表如下:
QRTZ_JOB_LISTENERS
QRTZ_TRIGGER_LISTENERS
QRTZ_FIRED_TRIGGERS
QRTZ_PAUSED_TRIGGER_GRPS
QRTZ_SCHEDULER_STATE
QRTZ_LOCKS
QRTZ_SIMPLE_TRIGGERS
QRTZ_CRON_TRIGGERS
QRTZ_TRIGGERS
QRTZ_JOB_DETAILS
QRTZ_CALENDARS
QRTZ_BLOB_TRIGGERS
2、 配置數據庫連接池,如果spring已經配置則不需要再另行配置,只需在后面配置的applicationContext-quartz.xml引入即可。
applicationContext.xml:
dataConfig.properties:
3、 配置quartz.properties
org.quartz.scheduler.instanceName屬性可為任何值,用在 JDBC JobStore 中來唯一標識實例,但是所有集群節點中必須相同。 org.quartz.scheduler.instanceId 屬性為 AUTO即可,基于主機名和時間戳來產生實例 ID。 org.quartz.jobStore.class屬性為 JobStoreTX,將任務持久化到數據中。因為集群中節點依賴于數據庫來傳播 Scheduler 實例的狀態,你只能在使用 JDBC JobStore 時應用 Quartz 集群。這意味著你必須使用 JobStoreTX 或是 JobStoreCMT 作為 Job 存儲;你不能在集群中使用 RAMJobStore。 org.quartz.jobStore.isClustered 屬性為 true,你就告訴了 Scheduler 實例要它參與到一個集群當中。這一屬性會貫穿于調度框架的始終,用于修改集群環境中操作的默認行為。 org.quartz.jobStore.clusterCheckinInterval 屬性定義了Scheduler 實例檢入到數據庫中的頻率(單位:毫秒)。Scheduler 檢查是否其他的實例到了它們應當檢入的時候未檢入;這能指出一個失敗的 Scheduler 實例,且當前 Scheduler 會以此來接管任何執行失敗并可恢復的 Job。通過檢入操作,Scheduler 也會更新自身的狀態記錄。clusterChedkinInterval 越小,Scheduler 節點檢查失敗的 Scheduler 實例就越頻繁。默認值是 15000 (即15 秒)。
quartz.properties:
4、 配置applicationContext-quartz.xml
5、 配置Job任務注意:加入定時任務有兩種方式:
① 繼承QuartzJobBean的類,重寫executeInternal(),詳細寫法:
② 用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean指定類和方法,但是直接使用會報java.io.NotSerializableException異常,一般用網上流傳的(需要將兩個類copy到自己的工程下,要有springJAR包,Job需要持久化到數據庫中,SimpleService必須實現Serializable)frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean,可以參考: http://jira.springframework.org/browse/SPR-3797。詳細寫法:
6、 配置到spring配置文件,自動調度任務。
7、 測試用例
Powered by: BlogJava Copyright © 瘋狂