Lesen Sie einen Datensatz / Artikel und schreiben Sie mehrere Datensätze / Artikel mit Spring Batch

8

Ich habe ein wenig gesucht, konnte aber kein Muster / Beispiel finden.

Ich habe eine Anforderung, wo Geokoordinaten von einer Tabelle (Eingabe) gelesen werden, verarbeitet werden, um POIs zu erzeugen, die der Koordinate zugeordnet sind. Eine Geo-Koordinate führt also zu einem oder mehreren POIs, die in eine andere Tabelle (Ausgabe) eingefügt werden müssen.

Ich verwende derzeit einen JdbcCursorItemReader und JdbcBatchItemWriter, um einen Eintrag / Datensatz zu lesen und einen Eintrag / Datensatz zu schreiben. Es gibt auch einen ItemProcessor, der die POIs für eine gegebene Geo-Koordinate erzeugt.

Hilft mir ein benutzerdefinierter JdbcBatchItemWriter dabei?

Irgendwelche Ideen? TIA.

    
user977505 25.10.2011, 19:02
quelle

3 Antworten

4

Wenn Sie die Objekte nur auf verschiedene Writer verteilen möchten (lesen Sie doppelte Ausgabe), können Sie das vorhandene CompositeItemWriter

Aber ich bin mir nicht sicher, ob Ihr Prozessor verschiedene Elementtypen erzeugt oder wenn Sie den Inhalt eines komplexen Elementtyps auf mehrere Autoren verteilen möchten. In diesen Fällen können Sie eine leicht geänderte Version für multiline-record- Autor Frage

%Vor%

Wenn Sie FlatFileItemWriter verwenden, vergessen Sie nicht, die Delegierten als ItemStreams zu registrieren (so Frühling Batch öffnet / schließen sie für Sie)

    
Michael Pralow 25.10.2011, 20:00
quelle
8

Was Sie wirklich suchen, ist ein Splitter -Muster:

Hier ist, wie es in Spring Integration definiert ist:

Ein Splitter ist eine Art von Nachrichtenendpunkt, dessen Aufgabe es ist, eine Nachricht von ihrem Eingangskanal zu akzeptieren, diese Nachricht in mehrere Nachrichten aufzuteilen und diese dann an ihren Ausgangskanal zu senden. Dies wird normalerweise zum Teilen eines "zusammengesetzten" Nutzlastobjekts in eine Gruppe von Nachrichten verwendet, die die unterteilten Nutzdaten enthalten.

Die Konfiguration ist extrem einfach:

 %Vor%

Oder Sie können Anmerkungen verwenden:

 %Vor%

Sie können natürlich Ihr eigenes JdbcBatchItemWriter schreiben, wenn es sich einfacher anfühlt. Spring Integration macht das aber schon für Sie.

Sie können Spring Integration JDBC-Unterstützung = & gt; jdbc:inbound-channel-adapter / jdbc:outbound-channel-adapter und der obige Splitter, um zu erreichen, was Sie wollen und .. Einfachheit.

    
tolitius 26.10.2011 02:01
quelle
0

Ich habe dies getan, indem ich die Writer-Klasse (in meinem Fall HibernateItemWriter) erweitert habe. Ich sehe eine Antwort beschreibt, wie man einen "Splitter" benutzt. Wenn jemand ein funktionierendes Beispiel dafür hat, wie das in einer Umgebung funktioniert, die den Spring-Boot-Starter-Parent verwendet, würde ich es gerne sehen. Für das, was ich tue (Erstellen einer Liste aus einem einzelnen Datensatz), wäre es viel einfacher, wenn Spring eine Schreibmethode zur Verfügung stellen würde, die eine Liste von Listen behandelt.

So habe ich den Writer erweitert, um mehrere Schreibvorgänge für jede gelesene / verarbeitete Zeile zu verarbeiten: Spring-Batch Mehrzeiliger Datensatz-Objekt-Writer mit variabler Anzahl von Zeilen pro Datensatz

    
MattC 05.01.2015 23:07
quelle