2017-09-25 72 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