Quartz建立多個不一樣名字的scheduler實例
- _http://my.oschina.net/laiweiwei/blog/122280
- 需求
建立多個不一樣的Scheduler實例,每一個實例自主啓動、關閉
- 問題
若是直接用
SchedulerFactory sf =
new
StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
- 獲取的scheduler是從倉儲SchedulerRepository裏面取出來的,倉儲註冊scheduler的時候爲每一個scheduler分配 一個惟一的名字,問題就在於這裏,Quartz默認有個配置文件quartz.properties,裏面定義了這個名字,這樣的話,每次經過 sf.getScheduler()獲取的都是同一個實例,(假設你認爲get出來的都是不一樣實例)把其中的某一個shceduler shutdown的話,其餘scheduler也會關閉掉,由於它們實際上是同一個實例!
嘗試使用:
sf.getScheduler(
"給定名字"
)
- 發現返回的都是null,翻看源碼,此方法並無進行建立對象的邏輯。而僅僅是lookup而已!
而後再嘗試經過DirectSchedulerFactory.getInstance().createXXX的方法建立Scheduler實例,結果發現這些方法的參數...:
.createScheduler(schedulerName, schedulerInstanceId, threadPool, jobStore);
- 這確實很靈活!可是真TM底層!忽然感到很無奈。
Google了好久,StackOverFlow上面也有相似的問題,可是都說沒有API直接提供建立給定名字的Scheduler實例。可是無心中想起 來,Quartz貌似支持配置文件初始化的,因而翻到了Quartz的默認配置文件(在其jar包裏)quartz.properties。 # Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
- 因而就照葫蘆畫瓢的,將這些配置內容拷貝一份,在代碼裏寫到一個Properties裏面,而後調用初始化方法。搞定!
- 解決方案
顯式使用StdSchedulerFactory,調用其initialize方法,而且本身定義填寫配置內容:
- 1 StdSchedulerFactory sf = new StdSchedulerFactory();
2 Properties props = new Properties();
3 props.put("org.quartz.scheduler.instanceName", "你定義的名字");
4 props.put("org.quartz.threadPool.threadCount", "10");#必填
5 sf.initialize(props);
6 scheduler = sf.getScheduler();
7 System.out.println(scheduler.getSchedulerName());
8 scheduler.shutdown();
- 以上方案經過初步測試使用。可是還須要在生產環境下使用看看......反饋狀況將在這裏補填
=================== 最新反饋 2013-05-08 11:39 ========================
通過近兩個月的生產環境使用,發現以上解決方案可行,推薦使用之
歡迎關注本站公眾號,獲取更多信息