Ich schreibe einen Spring Batch Job und in einem meiner Schritte habe ich den folgenden Code für den Prozessor:
%Vor% Der obige Code funktioniert, aber ich habe herausgefunden, dass es einige Randfälle gibt, wo mehr als ein Account
pro NewsletterSubscriber
erlaubt ist. Also muss ich den Statuscheck entfernen und mehr als ein Account
an den Objektschreiber übergeben.
Eine Lösung, die ich gefunden habe, ist, sowohl ItemProcessor
als auch ItemWriter
so zu ändern, dass sie mit List<Account>
type anstatt mit Account
umgehen, aber das hat zwei Nachteile:
Account
-Objekt in derselben Transaktion geschrieben werden kann, da eine dem Writer zugewiesene Liste mehrere Accounts enthalten kann, und das möchte ich vermeiden. Gibt es eine Möglichkeit, vielleicht einen Listener zu verwenden oder eine interne Komponente zu ersetzen, die von Spring Batch verwendet wird, um Listen im Prozessor zu vermeiden?
Ich habe ein Problem mit Spring Jira für dieses Problem geöffnet.
Ich schaue mir isComplete und getAdjustedOutputs Methoden in FaultTolerantChunkProcessor
, die als Erweiterungspunkte in SimpleChunkProcessor
um zu sehen, ob ich sie in irgendeiner Weise nutzen kann, um mein Ziel zu erreichen.
Jeder Hinweis ist willkommen.
Es gibt keine Möglichkeit, mehr als einen Artikel pro Aufruf an einen ItemProcessor
in Spring Batch zurückzugeben, ohne dabei weit in die Unkräuter zu gelangen. Wenn Sie wirklich wissen möchten, wo die Beziehung zwischen ItemProcessor
und ItemWriter
existiert ( nicht empfohlen ), werfen Sie einen Blick auf die Implementierungen der Schnittstelle ChunkProcessor
. Während der einfache Fall ( SimpleChunkProcessor
) nicht so schlecht ist, wenn Sie eine der fehlertoleranten Logik verwenden (Überspringen / Wiederholen über FaultTolerantChunkProcessor
), wird es sehr unhandlich schnell.
Eine viel einfachere Option wäre, diese Logik in ein ItemReader
zu verschieben, das diese Anreicherung durchführt, bevor das Element zurückgegeben wird. Umbrechen Sie den Wert ItemReader
, den Sie verwenden, in einer benutzerdefinierten ItemReader
-Implementierung, die die Dienstsuche vor dem Zurückgeben des Elements durchführt. In diesem Fall würden Sie, anstatt eine NewsletterSubscriber
vom Leser zurückzugeben, eine Account
basierend auf den vorherigen Informationen zurückgeben.
Der Objektprozessor nimmt eine Sache auf und gibt eine Liste zurück
%Vor%Wickeln Sie den nachgeschalteten Writer ein, um Dinge auszubügeln. Auf diese Weise müssen die Dinge, die hinter diesem Writer liegen, nicht mit Listen arbeiten.
%Vor%Tags und Links java spring spring-batch batch-processing