2017-09-25 3 views
0

J'utilise:Quartz DonT récupérer Job

  • Spring 4.2.9
  • PostgreSQL
  • Quartz 2.3.0
  • Java 8

J'ai quelques problèmes avec l'emploi de reprise serveurs de cluster ... J'ai 2 serveurs de test en cluster (1 DB).

Scheduler beau travail, mais quand je me arrête tomcat (1) où l'emploi est en cours d'exécution d'emploi, sur un autre serveur (2) récupère pas ...

Si je redémarre tomcat # 2, puis ordonnanceur travail de démarrage, si je commence tomcat # 1, quand tomcat # 2 fonctionne, le quartz prend le travail sur tomcat # 1. Travailler très bon, mais

Première question: Je dois quand tomcat # 1 est arrêté, tomcat # 2 sera sans emploi commencer ... redémarrer

Deuxième question: Et jdbcjobstore mieux pour moi? JobStoreTX ou JobStoreCMT? Dans le groupe de travail, j'ai 4 serveur sur le ressort 4.2.9

Désolé pour mon anglais et merci beaucoup pour vous des réponses!

Propriétés Quartz, @Bean dans mon projet

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"); 

Mon emploi et Trigger

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

Dans la première fois j'ai utilisé JobStoreTX et le problème était le même, j'ai essayé d'utiliser JobStoreCMT, mais ça n'aide pas ... –

+0

utilisez-vous la valeur par défaut pour "org.quartz.jobStore.clusterCheckinInterval"? Cela détermine la fréquence d'archivage des instances. Si cette valeur est importante dans votre configuration, le serveur 2 peut ne pas encore détecter le serveur 1. – Srinivas

+0

J'ai essayé votre solution, mais n'a pas aidé –

Répondre

0

Je problème, il y est à double org.quartz.scheduler.instanceId, en première est AUTO et deuxième IS_CLUSTERED. Merci à vous tous!

+0

MAIS 2 question séjour est ouvert! JobStoreTX ou JobStoreCMT? –

+0

À partir des javadocs, puisque vous exécutez cette partie du conteneur Tomcat JobStoreCMT [http://www.quartz-scheduler.org/api/2.1.7/org/quartz/impl/jdbcjobstore/JobStoreCMT.html] devrait être préféré. – Srinivas