Spring Batch - Leser, Schreiber und Prozessoren

Ein Item Reader liest Daten aus einer bestimmten Quelle in die Spring Batch-Anwendung ein, während an Item Writer schreibt Daten aus der Spring Batch-Anwendung an ein bestimmtes Ziel.

Ein Item processorist eine Klasse, die den Verarbeitungscode enthält, der die in den Federbatch eingelesenen Daten verarbeitet. Wenn die Anwendung n Datensätze liest, wird der Code im Prozessor für jeden Datensatz ausgeführt.

EIN chunk ist ein untergeordnetes Element der tasklet. Es wird zum Ausführen von Lese-, Schreib- und Verarbeitungsvorgängen verwendet. Mit diesem Element können wir Leser, Schreiber und Prozessoren in einem Schritt konfigurieren, wie unten gezeigt.

<batch:job id = "helloWorldJob"> 
   <batch:step id = "step1"> 
      <batch:tasklet> 
         <batch:chunk reader = "cvsFileItemReader" writer = "xmlItemWriter" 
            processor = "itemProcessor" commit-interval = "10"> 
         </batch:chunk> 
      </batch:tasklet> 
   </batch:step> 
</batch:job>

Spring Batch bietet Lesern und Schreibern das Lesen und Schreiben von Daten aus verschiedenen Dateisystemen / Datenbanken wie MongoDB, Neo4j, MySQL, XML, Flatfile, CSV usw.

Um einen Reader in Ihre Anwendung aufzunehmen, müssen Sie eine Bean für diesen Reader definieren, Werte für alle erforderlichen Eigenschaften innerhalb der Bean bereitstellen und die übergeben id einer solchen Bean als Wert für das Attribut des Chunk-Elements reader (Gleiches gilt für writer).

ItemReader

Es ist die Entität eines Schritts (eines Stapelprozesses), der Daten liest. Ein ItemReader liest jeweils einen Artikel. Spring Batch bietet eine SchnittstelleItemReader. All diereaders Implementieren Sie diese Schnittstelle.

Im Folgenden finden Sie einige der vordefinierten ItemReader-Klassen, die von Spring Batch zum Lesen aus verschiedenen Quellen bereitgestellt werden.

Leser Zweck
FlatFIleItemReader Daten aus Flatfiles lesen.
StaxEventItemReader Daten aus XML-Dateien lesen.
StoredProcedureItemReader Daten aus den gespeicherten Prozeduren einer Datenbank lesen.
JDBCPagingItemReader Daten aus relationalen Datenbanken lesen.
MongoItemReader Daten aus MongoDB lesen.
Neo4jItemReader Daten aus Neo4jItemReader lesen.

Wir müssen das konfigurieren ItemReadersindem Sie die Bohnen erstellen. Das Folgende ist ein Beispiel fürStaxEventItemReader Hier werden Daten aus einer XML-Datei gelesen.

<bean id = "mysqlItemWriter" 
   class = "org.springframework.batch.item.xml.StaxEventItemWriter"> 
   <property name = "resource" value = "file:xml/outputs/userss.xml" /> 
   <property name = "marshaller" ref = "reportMarshaller" /> 
   <property name = "rootTagName" value = "Tutorial" /> 
</bean> 

<bean id = "reportMarshaller" 
   class = "org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
   <property name = "classesToBeBound"> 
      <list> 
         <value>Tutorial</value> 
      </list> 
   </property> 
</bean>

Wie bereits erwähnt, müssen wir bei der Konfiguration den jeweiligen Klassennamen des erforderlichen Lesegeräts angeben und Werte für alle erforderlichen Eigenschaften bereitstellen.

ItemWriter

Es ist das Element der stepeines Batch-Prozesses, der Daten schreibt. Ein ItemWriter schreibt jeweils einen Artikel. Spring Batch bietet eine SchnittstelleItemWriter. Alle Autoren implementieren diese Schnittstelle.

Im Folgenden finden Sie einige der vordefinierten ItemWriter-Klassen, die von Spring Batch zum Lesen aus verschiedenen Quellen bereitgestellt werden.

Schriftsteller Zweck
FlatFIleItemWriter Daten in flache Dateien schreiben.
StaxEventItemWriter Daten in XML-Dateien schreiben.
StoredProcedureItemWriter Daten in die gespeicherten Prozeduren einer Datenbank schreiben.
JDBCPagingItemWriter Daten in eine relationale Datenbank schreiben.
MongoItemWriter Daten in MongoDB schreiben.
Neo4jItemWriter Daten in Neo4j schreiben.

Auf die gleiche Weise müssen wir die ItemWriter durch Erstellen der Beans konfigurieren. Das Folgende ist ein Beispiel fürJdbcCursorItemReader das schreibt Daten in eine MySQL-Datenbank.

<bean id = "dbItemReader"
   class = "org.springframework.batch.item.database.JdbcCursorItemReader" scope = "step">
   <property name = "dataSource" ref = "dataSource" />
   <property name = "sql" value = "select * from tutorialsdata" />
   <property name = "rowMapper">
      <bean class = "TutorialRowMapper" /> 
   </property>
</bean>

Artikelprozessor

ItemProcessor: Ein ItemProcessor wird zur Verarbeitung der Daten verwendet. Wenn der angegebene Artikel nicht gültig ist, wird er zurückgegebennullAndernfalls wird das angegebene Element verarbeitet und das verarbeitete Ergebnis zurückgegeben. Die SchnittstelleItemProcessor<I,O> repräsentiert den Prozessor.

Tasklet class - Wenn nein reader und writergegeben sind, fungiert ein Tasklet als Prozessor für SpringBatch. Es werden nur einzelne Aufgaben verarbeitet.

Wir können einen benutzerdefinierten Artikelprozessor definieren, indem wir die Schnittstelle implementieren ItemProcessor des Pakets org.springframework.batch.item.ItemProcessor. Diese ItemProcessor-Klasse akzeptiert ein Objekt und verarbeitet die Daten und gibt die verarbeiteten Daten als anderes Objekt zurück.

In einem Batch-Prozess, wenn "n"Datensätze oder Datenelemente werden gelesen. Für jeden Datensatz werden die Daten gelesen, verarbeitet und in den Writer geschrieben. Um die Daten zu verarbeiten, wird der übergebene Prozessor weitergeleitet.

Angenommen, Sie haben Code zum Laden eines bestimmten PDF-Dokuments geschrieben, eine neue Seite erstellt und das Datenelement in Tabellenform in die PDF-Datei geschrieben. Wenn Sie diese Anwendung ausführen, liest sie alle Datenelemente aus dem XML-Dokument, speichert sie in der MySQL-Datenbank und druckt sie in dem angegebenen PDF-Dokument auf einzelnen Seiten aus.

Beispiel

Es folgt ein Beispiel für eine ItemProcessor-Klasse.

import org.springframework.batch.item.ItemProcessor;  

public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {  
   
   @Override 
   public Tutorial process(Tutorial item) throws Exception {  
      System.out.println("Processing..." + item); 
      return item; 
   } 
}