Spring Batch Tutorial:Schreiben von Informationen in eine XML-Datei
Im vorherigen Teil meines Spring Batch-Tutorials wurde beschrieben, wie Sie Informationen in eine CSV-Datei schreiben können. Dieses Mal lernen Sie, die Ausgabedaten Ihres Spring Batch-Jobs in eine XML-Datei zu schreiben. Nachdem Sie diesen Blogbeitrag gelesen haben, werden Sie:
- Kann die Abhängigkeiten identifizieren, die erforderlich sind, wenn Sie die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei schreiben möchten.
- Kann die erforderlichen Abhängigkeiten mit Maven und Gradle erhalten.
- Verstehen Sie, wie Sie einen
ItemWriter
konfigurieren können Bean, die die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei schreibt.
Beginnen wir mit einem kurzen Blick auf Ihren Batch-Job.
Einführung in Ihren Batch-Job
Der Beispiel-Batch-Job dieses Blogbeitrags verarbeitet die Studenteninformationen eines Online-Kurses. Die Eingabedaten dieses Batch-Jobs werden aus einer Datenquelle gelesen und in StudentDTO
umgewandelt Objekte. Die StudentDTO
Klasse enthält die Informationen eines einzelnen Schülers und ihr Quellcode sieht wie folgt aus:
public class StudentDTO { private String emailAddress; private String name; private String purchasedPackage; public StudentDTO() {} public String getEmailAddress() { return emailAddress; } public String getName() { return name; } public String getPurchasedPackage() { return purchasedPackage; } public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } public void setName(String name) { this.name = name; } public void setPurchasedPackage(String purchasedPackage) { this.purchasedPackage = purchasedPackage; } }
In diesem Blogbeitrag schreiben Sie die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei. Genauer gesagt muss diese XML-Datei eine Schülerliste enthalten, die die folgenden Informationen von jedem Schüler enthält:
- Der Name des Schülers.
- Die E-Mail-Adresse des Kursteilnehmers.
- Der Name des gekauften Pakets.
Nachdem Sie die Ausgabedaten in eine XML-Datei geschrieben haben, muss der Inhalt der Ausgabedatei wie folgt aussehen:
<?xml version="1.0" encoding="UTF-8"?> <students> <student> <emailAddress>[email protected]</emailAddress> <name>Tony Tester</name> <purchasedPackage>master</purchasedPackage> </student> <student> <emailAddress>[email protected]</emailAddress> <name>Nick Newbie</name> <purchasedPackage>starter</purchasedPackage> </student> <student> <emailAddress>[email protected]</emailAddress> <name>Ian Intermediate</name> <purchasedPackage>intermediate</purchasedPackage> </student> </students>
Als nächstes erfahren Sie, wie Sie mit Maven und Gradle die erforderlichen Abhängigkeiten erhalten.
Erforderliche Abhängigkeiten abrufen
Bevor Sie die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei schreiben können, müssen Sie die folgenden Abhängigkeiten abrufen:
- Die
spring-oxm
Abhängigkeit stellt die High-Level-API bereit, die Ihnen hilft, Objekte in XML-Dokumente zu serialisieren und XML-Dokumente in Objekte zu deserialisieren. - Die
xstream
Abhängigkeit ist eine Bibliothek, die Objekte in XML-Dokumente serialisieren und XML-Dokumente in Objekte deserialisieren kann. Es ist schnell und hat einen geringen Speicherverbrauch, weshalb es nützlich ist, wenn Sie mit Batch-Jobs arbeiten, die große Datenmengen verarbeiten.
Wenn Sie die Abhängigkeitsverwaltung von Spring Boot mit Maven verwenden, können Sie diese Abhängigkeiten erhalten, indem Sie die folgenden Abhängigkeitsdeklarationen zu dependencies
hinzufügen Abschnitt Ihrer POM-Datei:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.15</version> </dependency>
Wenn Sie die Abhängigkeitsverwaltung von Spring Boot mit Gradle verwenden, können Sie diese Abhängigkeiten erhalten, indem Sie Ihrer build.gradle die folgenden Abhängigkeitsdeklarationen hinzufügen Datei:
dependencies { implementation( 'org.springframework:spring-oxm', 'com.thoughtworks.xstream:xstream:1.4.15' ) }
Als Nächstes lernen Sie, die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei zu schreiben.
Schreiben von Informationen in eine XML-Datei
Wenn Sie die Ausgabedaten Ihres Batch-Jobs verarbeiten möchten, müssen Sie einen ItemWriter
konfigurieren Bohne. Da Sie die Ausgabedaten in eine XML-Datei schreiben müssen, müssen Sie diese Bean folgendermaßen konfigurieren:
Zuerst müssen Sie die Konfigurationsklasse erstellen, die die Beans enthält, die den Workflow Ihres Spring Batch-Jobs beschreiben. Der Quellcode Ihrer Konfigurationsklasse sieht wie folgt aus:
import org.springframework.context.annotation.Configuration; @Configuration public class SpringBatchExampleJobConfig { }
Zweiter müssen Sie die Methode erstellen, die Ihren ItemWriter
konfiguriert Bohne. Stellen Sie sicher, dass die erstellte Methode einen Environment
akzeptiert Objekt als Methodenparameter und gibt einen ItemWriter<StudentDTO>
zurück Objekt.
Nachdem Sie diese Methode zu Ihrer Konfigurationsklasse hinzugefügt haben, sieht ihr Quellcode wie folgt aus:
import org.springframework.batch.item.ItemWriter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; @Configuration public class SpringBatchExampleJobConfig { @Bean public ItemWriter<StudentDTO> itemWriter(Environment environment) { } }
Dritter , müssen Sie den itemWriter()
implementieren Methode, indem Sie diesen Schritten folgen:
- Erstellen Sie einen neuen
StaxEventItemWriterBuilder<StudentDTO>
Objekt. Dieses Objekt erstelltStaxEventItemWriter<StudentDTO>
Objekte, die die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei schreiben können. - Konfigurieren Sie den Namen des
ItemWriter
. - Konfigurieren Sie den Dateipfad der erstellten XML-Datei. Sie können diese Informationen aus einer Eigenschaftendatei lesen, indem Sie den
Environment
verwenden Objekt als Methodenparameter angegeben. - Stellen Sie sicher, dass der erstellte
ItemWriter
erstellt das XML-Dokument mithilfe der XStream-Bibliothek. Denken Sie daran, sicherzustellen, dassstudent
Das XML-Element enthält die Informationen eines einzelnen Schülers. - Konfigurieren Sie den Namen des Root-Elements (
students
). - Erstellen Sie einen neuen
StaxEventItemWriter<StudentDTO>
Objekt und gibt das erstellte Objekt zurück.
Nachdem Sie den itemWriter()
implementiert haben -Methode sieht der Quellcode Ihrer Konfigurationsklasse wie folgt aus:
import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.xml.builder.StaxEventItemWriterBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.oxm.xstream.XStreamMarshaller; import java.util.Collections; @Configuration public class SpringBatchExampleJobConfig { @Bean public ItemWriter<StudentDTO> itemWriter(Environment environment) { String exportFilePath = environment.getRequiredProperty( "batch.job.export.file.path" ); Resource exportFileResource = new FileSystemResource(exportFilePath); XStreamMarshaller studentMarshaller = new XStreamMarshaller(); studentMarshaller.setAliases(Collections.singletonMap( "student", StudentDTO.class )); return new StaxEventItemWriterBuilder<StudentDTO>() .name("studentWriter") .resource(exportFileResource) .marshaller(studentMarshaller) .rootTagName("students") .build(); } }
Sie können jetzt die erforderlichen Abhängigkeiten abrufen und einen ItemWriter
konfigurieren Bean, die die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei schreibt. Fassen wir zusammen, was Sie aus diesem Blogbeitrag gelernt haben.
Zusammenfassung
In dieser Lektion haben Sie vier Dinge gelernt:
- Der
spring-oxm
Abhängigkeit stellt die High-Level-API bereit, die Ihnen hilft, Objekte in XML-Dokumente zu serialisieren und XML-Dokumente in Objekte zu deserialisieren. - Die
xstream
Abhängigkeit ist eine Bibliothek, die Objekte in XML serialisieren und XML-Dokumente in Objekte deserialisieren kann. Es ist schnell und hat einen geringen Speicherbedarf, weshalb es nützlich ist, wenn Sie mit Batch-Jobs arbeiten, die große Datenmengen verarbeiten. - Wenn Sie die Ausgabedaten Ihres Batch-Jobs in eine XML-Datei schreiben müssen, müssen Sie den
StaxEventItemWriter<T>
verwenden Klasse. - Die
StaxEventItemWriter<T>
-Klasse serialisiert Objekte in XML, indem sie einenMarshaller
verwendet .
Der nächste Teil meines Spring Batch-Tutorials beschreibt, wie Sie die Ausgabedaten Ihres Batch-Jobs mithilfe von JDBC in eine relationale Datenbank schreiben können.