2017-09-25 1 views
0

Ich benutze:Quartz nicht erholen Job

  • Frühling 4.2.9
  • PostgreSQL
  • Quartz 2.3.0
  • Java 8

Ich habe einige Probleme mit Wiederherstellungsauftrag in Cluster-Server ... Ich habe 2 Test-Server im Cluster (1 DB).

Scheduler arbeiten gut, aber wenn ich aufhören Kater (1), in dem Job ausgeführt wird, auf einem anderen Server (2) Job erholen wird nicht ...

Wenn ich tomcat neu starten # 2, dann Scheduler Beginn der Arbeit, Wenn ich Kater Nr. 1 starte, wenn Kater Nr. 2 arbeitet, nehme Quarz Arbeit an Kater Nr. 1. Arbeiten sehr gut, aber

Erste Frage: Ich brauche, wenn Kater # 1 gestoppt wird, tomcat 2 # Job starten wird ohne Neustart ...

Zweite Frage: Und was jdbcjobstore besser für mich? JobStoreTX oder JobStoreCMT? Im Arbeitscluster habe ich 4 Server auf Frühling 4.2.9

Entschuldigung für mein Englisch und vielen Dank für Ihre Antworten!

Eigenschaften Quarz, @Bean in meinem Projekt

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

Mein Job und 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

In der ersten Zeit habe ich JobStoreTX verwendet und das Problem war gleich, ich habe versucht, JobStoreCMT zu verwenden, aber es hilft nicht ... –

+0

verwenden Sie den Standard für "org.quartz.jobStore.clusterCheckinInterval"? Dies legt fest, wie oft die Instanzen einchecken. Wenn dieser Wert in Ihrer Einstellung groß ist, erkennt Server 2 möglicherweise noch nicht, dass Server 1 inaktiv ist. – Srinivas

+0

Ich habe versucht, Ihre Lösung, aber hat nicht geholfen –

Antwort

0

I Problem gefunden, es wurde doppelt org.quartz.scheduler.instanceId, in der ersten Zeit ist AUTO und zweite IS_CLUSTERED. Danke euch allen!

+0

ABER 2 Frage bleiben ist offen! JobStoreTX oder JobStoreCMT? –

+0

Von den Javadocs, da Sie diesen Teil des Tomcat-Containers ausführen, sollte JobStoreCMT [http://www.quartz-scheduler.org/api/2.1.7/org/quartz/impl/jdbcjobstore/JobStoreCMT.html] bevorzugt werden. – Srinivas

Verwandte Themen