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);
In der ersten Zeit habe ich JobStoreTX verwendet und das Problem war gleich, ich habe versucht, JobStoreCMT zu verwenden, aber es hilft nicht ... –
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
Ich habe versucht, Ihre Lösung, aber hat nicht geholfen –