2012-09-10 6 views
9

Ich möchte nur wissen, ob es einen "JOB" Scope im Frühling Batch, wie der "STEP" Scope? Wenn nicht, sollten wir unseren benutzerdefinierten Bereich entwickeln, oder gibt es eine bessere Alternative?Gibt es einen Spring Batch "Job" Bereich?

Vielen Dank im Voraus.

+0

Können Sie Ihre Frage mit weiteren Details über das, was Sie erreichen möchten, erweitern? –

+0

Ich habe eine DataHolder-Bean erstellt, um Daten zwischen verschiedenen Jobschritten zu teilen. Mein Job konnte asynchron von mehreren Threads ausgeführt werden, also wollte ich für die Thread-Sicherheitsanforderungen eine DataHolder-Bean für jeden ausgeführten Job erstellen. –

Antwort

0

Wenn Ihre DataHolder-Bean einen Status besitzt, können Sie es mit einem geeigneten bean scope z. Prototyp

+0

Aber mit dem Prototyp-Bereich, jedes Mal, wenn ich meine DataHolder Bean von einem Job-Schritt referenzieren, würde eine neue Bean erstellt werden? Ich möchte die gleiche DataHolder-Bean aus allen Schritten eines bestimmten Jobs verwenden. –

+0

Ich bin immer noch nicht sicher über Ihren Anwendungsfall, aber ein einfacher threadsafe shared state könnte erreicht werden mit http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html –

+0

Danke Michael für Ihre Hilfe, Um mein Problem zu lösen, erstelle ich schließlich eine DataHolderResolver Bean (Singleton), die die Methode getDataHolder (int jobId) enthält, die den DataHolder zurückgibt, der der angegebenen jobId zugeordnet ist. Ich habe meine dataHolder-Bean als Prototyp deklariert und die Springfunktion der lookup-Methode für die Bean "dataHolderResolver" verwendet, um eine neue dataHolder-Referenz zu erhalten, wenn sie noch nicht für eine bestimmte jobId erstellt und zwischengespeichert wurde. Aber ich denke, dass es nützlich sein wird, den 'Job'-Bereich in der nächsten Version von Spring Batch zu haben. –

6

A jira wurde vor über Frühjahr Batch Probleme Tracker zu diesem Thema einige Male geöffnet: https://jira.springsource.org/browse/BATCH-1701

Ein Pull-Anforderung auch gestellt wurde, wird es hoffentlich bald fusionieren werden, weil ich diesen Einsatz haben auch Fall: https://github.com/SpringSource/spring-batch/pull/41

Es gibt mehrere Abhilfen in der Zwischenzeit, jeder mit seinem Nachteil, diese Antwort auf Stackoverflow sehen: https://stackoverflow.com/a/8121102/470107

+0

Danke Raphael;) –

+0

Ich denke, der dritte Link die richtige Art, es zu tun: Sie haben einen "Job Ausführungsumfang", der besser ist als ein "Job" Bereich, wenn Sie jeden Thread mit seinen eigenen Daten isoliert haben wollen –