使用MongoDB作為Quartz JobStore
Quartz 是 OpenSymphony 開源組織在任務調度領域的一個開源項目,完全基于 Java 實現。該項目于 2009 年被 Terracotta 收購,目前是 Terracotta 旗下的一個項目。你可以到 http://www.quartz-scheduler.org/站點下載 Quartz 的發布版本及其源代碼。目前最新的版本是2.2.1。
作為一個優秀的開源調度框架,Quartz 具有以下特點:
- 強大的調度功能,例如支持豐富多樣的調度方法,可以滿足各種常規及特殊需求;
- 靈活的應用方式,例如支持任務和調度的多種組合方式,支持調度數據的多種存儲方式;
- 分布式和集群能力,Terracotta 收購后在原來功能基礎上作了進一步提升。本文暫不討論該部分內容
另外,作為 Spring 默認的調度框架,Quartz 很容易與 Spring 集成。
下面是Quartz中的一些術語:
- scheduler: 任務調度器
- trigger: 觸發器,用于定義任務調度時間規則
- job: 任務,即被調度的任務
- misfire: 錯過的,指本來應該被執行但實際沒有被執行的任務調度
JobStore 負責保存Quartz Scheduler的工作數據, 所以當你的程序重啟時,或者在分布式的環境下, 你的應用程序都可以通過這些數據觸發事件。 你要基于你的應用程序選擇合適的JobStore, 首先你必須要了解各個JobStore, 之后才能容易的選擇JobStore。 Quartz框架本身提供了幾種JobStore:
- RAMJobStore
最簡單有效的一個JobStore。它將數據保存在內存中, 所以快是它的特點。缺點是當程序重啟時,內存中的數據丟失了,也就是quartz的所有的工作數據都必須重建。
在屬性文件中配置此JobStore:
|
|
- JDBCJobStore
恰如其名, 此JobStore使用關系型數據庫保存Quartz的工作數據。由于需要讀取數據庫,它可能不如RAMJobStore
那么快,但是能夠持久化數據。程序重啟時可以恢復Quartz。
各種主流的數據庫都支持,如mysql, oracle, sql server,db2, postgresql, hsql等。
在屬性文件中配置此JobStore:
|
|
- TerracottaJobStore
使用Terracotta server存儲數據。性能介于前兩者之間。
在屬性文件中配置此JobStore:
|
|
此外還有一些第三方的JobStore,使用Nosql持久化數據。 比如redis-quartz, 還有這篇文章介紹的quartz-mongodb.
- quartz-mongodb
使用MongoDB持久化數據,JDBC中的表正好可以和MongoDB的collection相對應。
你需要在pom.xml中加入此庫:
|
|
配置quartz的屬性:
# Use the MongoDB store
org.quartz.jobStore.class=com.novemberain.quartz.mongodb.MongoDBJobStore
# MongoDB URI (optional if 'org.quartz.jobStore.addresses' is set)
org.quartz.jobStore.mongoUri=mongodb://localhost:27020
# comma separated list of mongodb hosts/replica set seeds (optional if 'org.quartz.jobStore.mongoUri' is set)
org.quartz.jobStore.addresses=host1,host2
# database name
org.quartz.jobStore.dbName=quartz
# Will be used to create collections like mycol_jobs, mycol_triggers, mycol_calendars, mycol_locks
org.quartz.jobStore.collectionPrefix=mycol
# thread count setting is ignored by the MongoDB store but Quartz requries it
org.quartz.threadPool.threadCount=1
如果你使用Quartzite (quartz for Clojure), 需要配置JobStore如下:
|
|
但是quartz-mongodb有一個很大的限制,就是 Quartz 不支持。
注意這里的集群是指quartz集群,不是MongoDB集群。
這一特性的缺乏相當致命, 畢竟大部分的Quartz應用還是集群模式。
來自:http://colobu.com/2014/08/11/Using-MongoDB-as-Quartz-Jobstore/
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!