2012-11-20 5 views
7

Ich habe 2 verschiedene Jobs (eigentlich mehr, aber der Einfachheit halber angenommen 2). Jeder Job kann parallel zum anderen Job ausgeführt werden, aber jede Instanz desselben Jobs sollte sequenziell ausgeführt werden (andernfalls können sich die Instanzen gegenseitig ausnutzen).Spring Batch: verschiedene Job Launcher für verschiedene Jobs

Grundsätzlich möchte ich, dass jeder dieser Jobs eine eigene Warteschlange mit Jobinstanzen hat. Ich dachte, ich könnte dies mit zwei verschiedenen Thread-Pool-Job-Launcher (jeweils mit 1 Thread) tun und jedem Job einen Job-Launcher zuordnen.

Gibt es eine Möglichkeit, dies zu tun, die beim Starten von Jobs über die Spring Batch Admin Web-Benutzeroberfläche berücksichtigt wird?

Antwort

2

Es gibt eine Möglichkeit, einen bestimmten Job Launcher für einen bestimmten Job anzugeben, aber die einzige Möglichkeit, die ich gefunden habe, ist durch die Verwendung eines JobStep.

Wenn Sie einen Job namens "specificJob" haben, wird dies einen anderen Job "queueSpecificJob" erstellen. Wenn Sie ihn entweder über Quartz oder Spring Batch web admin starten, wird er eine "specificJob" -Ausführung anstehen.

<bean id="specificJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
    <property name="jobRepository" ref="jobRepository"/> 
    <property name="taskExecutor"> 
     <task:executor id="singleThreadPoolExecutor" pool-size="1"/> 
    </property> 
</bean> 

<job id="queueSpecificJob"> 
    <step id="specificJobStep"> 
     <job ref="specificJob" job-launcher="specificJobLauncher" job-parameters-extractor="parametersExtractor" /> 
    </step> 
</job> 
0

Mit einem Shell-Skript können Sie verschiedene Jobs parallel starten.

Fügen Sie am Ende jeder Befehlszeile eine '&' hinzu. Die Shell wird sie parallel zu ihrer eigenen Ausführung ausführen.

+1

Ich glaube nicht, Shell-Skripte etwas mit Spring Batch –

+0

Shell-Skript zu tun haben, ist nur für die Feder Batch-Jobs als parallele Jobs aufrufen. – Sajith

+0

Dies befasst sich nicht mit der Frage der Warteschlange Jobs. Ich möchte insbesondere nicht, dass Jobinstanzen des gleichen Jobs parallel ausgeführt werden, ich möchte, dass sie nacheinander ausgeführt werden. – ahbutfore

1

@ ahbutfore

Wie werden die Jobs ausgelöst? Verwenden Sie zufällig Quarz Trigger? Wenn ja, würde die Implementierung/Erweiterung der org.quartz.StatefulJob-Schnittstelle in all Ihren Jobs die Arbeit für Sie erledigen?

Siehe Spring Bohnen Konfiguration hier: https://github.com/regunathb/Trooper/blob/master/examples/example-batch/src/main/resources/external/shellTaskletsJob/spring-batch-config.xml. Überprüfen Sie den Quellcode von org.trpr.platform.batch.impl.spring.job.BatchJob

Sie können komplexere Serialisierung (einschließlich Spring Batch-Knoten) mit einer geeigneten "Leader Election" Implementierung durchführen. Ich habe Netflix Curator (ein Apache Zookeeper Rezept) in meinem Projekt verwendet. Einige Hinweise hier: https://github.com/regunathb/Trooper/wiki/Useful-Batch-Libraries