2016-04-05 3 views
0

Mit Spring Batch/Spring Boot ist es möglich, einen Spring Batch Job mit Reader, Prozessor und Writer als Job mehrmals pro Thread zu starten mit verschiedenen jobparameters?Mehrere Instanzen desselben Spring-Batch-Jobs in jedem Thread mit unterschiedlichen Parametern

Mein Anwendungsfall:

Ich habe eine Reihe von verschiedenen Ordnern, die ich brauche zu beobachten. Wenn neue Dateien in einen Ordner gelangen, muss ich den Job aufrufen und den Ordner sperren, während der Job verarbeitet wird.

So kann dies für eine verschiedene Anzahl von Ordnern so passieren, deshalb Ich brauche die mehrere Instanzen eines Feder-Batch-Job, aber mit unterschiedlichen jobparameters jedes Mal.

Eine Jobinstanz pro Ordner und die Anzahl der Ordner kann variieren. Wer weiß, ob es überhaupt mit Federbatch möglich ist, oder sollte ich es selbst erfinden? Ich habe versucht, mit Feder Batch-Job, aber es sagt immer:

Eine Job-Ausführung für diesen Job bereits läuft: JobInstance: id = 1, Version = 0, Job = [feedfiletransformer-Delegat-job]

+0

Paramaterize es richtig, tun auch wirklich wollen, brauchen Job läuft, Sie könnten Sie es mit Frühlings-Integration kombinieren, die neue Dateien erkennen und einen Batch-Job Kickoff. –

+0

Ja, ich habe mir das auch angeschaut, aber ich muss auch in der Lage sein, mein Setup manchmal zu fixieren, daher denke ich, dass es sicherer ist, einen Hauptjob aufzuwecken und die Ordner zu scannen. Denn wenn die Ereignisse bereits stattgefunden haben, wird der Job nicht aufholen und dies könnte der Fall sein, wenn das Service-Fenster geöffnet ist. – Elias

+0

Dann stoppen Sie einfach den Dateiabrufer und starten Sie, wenn Sie wieder oben sind. –

Antwort

1

gelöst durch Lesen dieser Nachricht mkyoung

JobParameters jobParameters = 
      new JobParametersBuilder() 
      .addLong("time",System.currentTimeMillis()).toJobParameters(); 
+0

imho ein schlechter, füge einfach die Datei statt die Zeit hinzu. Auf diese Weise haben Sie immer noch einen einzigartigen Job für eine einzelne Datei. Sie sollten das, was Sie benötigen, parametrieren. Teilen Sie Ihre Jobs in 2 auf (oder verwenden Sie die Spring-Integration wie vorgeschlagen), eine zum Scannen der Dateien und zum Starten eines neuen Jobs pro Datei. –

+0

Ja, ich mache das letztgenannte. Aber ich kämpfte mit: Eine Jobausführung für diesen Job läuft bereits. Aber du meinst, dass es ohne die Zeiteindeutigkeit funktionieren wird und stattdessen auf Jobparametern unterscheiden kann? – Elias

+0

Sie sollten den Namen der Datei hinzufügen, die Sie verarbeiten (vorausgesetzt, der Name der Datei ist bei jeder Ausführung eines neuen Jobs eindeutig). –