Hallo Frühling Batch-Benutzer,Spring Batch Neustart abgestürzt Jobs
in Bezug auf die Dokumentation http://docs.spring.io/spring-batch/reference/htmlsingle/#d5e1320
"Wenn der Prozess gestorben (" kill -9" oder Serverausfall) wird der Auftrag, natürlich, nicht ausgeführt wird, aber das JobRepository hat keine Möglichkeit zu wissen, weil niemand es gesagt hat, bevor der Prozess gestorben ist. "
Ich versuche, die abgestanden Job Hinrichtung zu finden und neu starten, indem
Set<JobExecution> jobExecutions = jobExplorer.findRunningJobExecutions(jobName);
...
jobExecution.setStatus(FAILED);
jobExecution.setEndTime(new Date());
jobRepository.update(jobExecution);
jobOperator.restart(jobExecution.getId());
verwenden, aber dies scheint sehr unbequem zu sein. 1) Ich muss dies tun, bevor andere (neue) Jobs gestartet werden können. 2) Ich muss mehrere Instanzen von laufenden Servern behandeln, damit findRunningJobExecutions nicht den Trick machen.
können Sie finden weitere Fragen zu diesem Thema: https://jira.spring.io/browse/BATCH-2433?jql=project%20%3D%20BATCH%20AND%20status%20%3D%20Open%20ORDER%20BY%20priority%20DESC Spring Batch after JVM crash
Ich würde eine Lösung zu sehen lieben, einen „Start-up, saubere Arbeitsplätze Hörer“ zu registrieren. Dies behebt weiterhin nicht die Probleme, die von der Multi-Server-Umgebung herrühren, da Spring Batch nicht weiß, ob die von STARTED markierte JobExecution nicht auf einer anderen Instanz ausgeführt wird.
Vielen Dank für jede Beratung Alex
kill -9 ist ein Szenario, in dem ein echter (und sauberer) Neustart ist nicht möglich, Springbatch konnte den aktuellen Prozessfortschritt nicht speichern, um ihn erneut zu starten –
Ja, danke für deinen Kommentar. Ich weiß, dass es nicht so entworfen ist, aber es sollte mit diesem Zeug umgehen. Ich habe ein Problem erstellt https://jira.spring.io/browse/BATCH-2505?filter=-2 Es ist nicht sehr üblich, den Server so zu stürzen, aber es ist möglich für eine Produktionsumgebung und sollte in der behandelt werden sauberste Art und Weise. –