- _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 ========================
經過近兩個月的生產環境使用,發現以上解決方案可行,推薦使用之
- 需求