2013年4月6日 星期六

Quartz初體驗 - 如何使用不同的Schedule PropertySetting


在執行
scheduler.scheduleJob(job, trigger);

時出現:


RROR JobRunShell - Job group1.server.client.loginobserver.BackupGpBaseDataObser
ver@6909db threw an unhandled Exception:
java.lang.NullPointerException
        at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.j
ava:557)


後來發現原來呼叫預設的

_scheduler = StdSchedulerFactory.getDefaultScheduler();

等同使用quartz.properties 此設定檔中的資料,
而每一個設定檔中的資料只能使用一次,因此若需建立第二個schedule,則需使用不同的設定檔:
  1. 建立新的properties設定檔:"backup.quartz.properties"
     
    org.quartz.scheduler.instanceName = MyBackupScheduler
    org.quartz.threadPool.threadCount = 3
    org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
    
  2. 將建立schedule code改為:
     
    StdSchedulerFactory factory = new StdSchedulerFactory();
     factory.initialize("backup.quartz.properties");
    _scheduler = factory.getScheduler();
    _scheduler.start();
而原先呼叫 StdSchedulerFactory.getDefaultScheduler() 等同於:
 
StdSchedulerFactory factory = new StdSchedulerFactory();
 factory.initialize();//default use quartz.properties 
_scheduler = factory.getScheduler();
_scheduler.start();

不過我搞不太懂為什麼問題出在【重複Schedule設定】,卻會拋出NullException這種這麼不明確的錯誤呢....
參考:Novice question: how do I get to PropertySettingFactory?

沒有留言:

張貼留言