2017-09-25 74 views
0

我用:石英不恢復工作

  • 春4.2.9
  • PostgreSQL的
  • 石英2.3.0
  • 的Java 8

我有一些問題,在恢復作業集羣服務器...我在集羣中有2個測試服務器(1個數據庫)。

調度工作很好,但是當我停止Tomcat(1),其中作業正在運行,另一臺服務器(2)作業未恢復上...

如果我重新啓動Tomcat#2,然後調度開始工作,如果我啓動tomcat#1,當tomcat#2工作時,石英將工作轉移到tomcat#1。工作很不錯,但

第一個問題:我需要當Tomcat#1停止Tomcat的#2將無重新開始工作......

第二個問題:什麼jdbcjobstore更好的給我嗎? JobStoreTX or JobStoreCMT?在工作集羣中,我有4個服務器在春季4.2.9

對不起,我的英語和非常感謝你的答案!

屬性石英,@Bean在我的項目

Properties prop = new Properties(); 
prop.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool"); 
prop.put("org.quartz.threadPool.threadCount", "4"); 
prop.put("org.quartz.jobStore.misfireThreshold", "20000"); 
prop.put("quartz.scheduler.instanceName", "ServerScheduler"); 
prop.put("org.quartz.scheduler.instanceId", "AUTO"); 
prop.put("org.quartz.scheduler.skipUpdateCheck", "true"); 
prop.put("org.quartz.scheduler.instanceId", "IS_CLUSTERED"); 
prop.put("org.quartz.scheduler.jobFactory.class","org.quartz.simpl.SimpleJobFactory"); 
prop.put("org.quartz.jobStore.class","org.quartz.impl.jdbcjobstore.JobStoreCMT"); 
prop.put("org.quartz.jobStore.driverDelegateClass","org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"); 
prop.put("org.quartz.jobStore.dataSource", "myDS"); 
prop.put("org.quartz.jobStore.nonManagedTXDataSource", "myDS"); 
prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); 
prop.put("org.quartz.jobStore.isClustered", "true"); 
prop.put("org.quartz.dataSource.myDS.driver", "org.postgresql.Driver"); 
prop.put("org.quartz.dataSource.myDS.URL", url); 
prop.put("org.quartz.dataSource.myDS.user", user); 
prop.put("org.quartz.dataSource.myDS.password", password); 
prop.put("org.quartz.dataSource.myDS.maxConnections", "4"); 

我的工作和觸發

JobDetail job = newJob(QuartzStockTask.class) 
       .withIdentity("Job " + "1", "Job group " + "11") 
       .requestRecovery(true) 
       .build(); 

Trigger sTrigger1 = newTrigger() 
       .withIdentity("Trig " + "1", "Trig group " + "11") 
       .startNow() 
       .withSchedule(simpleSchedule() 
         .withIntervalInSeconds(10) 
         .repeatForever()) 
       .build(); 

scheduler.scheduleJob(job, sTrigger1); 
+0

我第一次使用JobStoreTX和問題是一樣的,我試圖使用JobStoreCMT,但它沒有幫助... –

+0

你使用默認的「org.quartz.jobStore.clusterCheckinInterval」?這決定了實例檢查的頻率。如果此值在設置中較大,則服務器2可能尚未檢測到服務器1已關閉。 – Srinivas

+0

我試過你的解決方案,但沒有幫助 –

回答

0

我發現的問題,它是雙org.quartz.scheduler.instanceId,在第一時間爲AUTO和第二個IS_CLUSTERED。 謝謝大家!

+0

但2問題保持開放! JobStoreTX或JobStoreCMT? –

+0

從javadocs開始,由於您正在運行tomcat容器的部分JobStoreCMT [http://www.quartz-scheduler.org/api/2.1.7/org/quartz/impl/jdbcjobstore/JobStoreCMT.html]應該是首選。 – Srinivas