Spring Batch: lectores, escritores y procesadores

Un Item Reader lee datos en la aplicación de lote de primavera de una fuente en particular, mientras que un Item Writer escribe datos de la aplicación Spring Batch en un destino en particular.

Un Item processores una clase que contiene el código de procesamiento que procesa los datos leídos en el lote de primavera. Si la aplicación lee n registros, el código del procesador se ejecutará en cada registro.

UN chunk es un elemento hijo de la tasklet. Se utiliza para realizar operaciones de lectura, escritura y procesamiento. Podemos configurar el lector, el escritor y los procesadores usando este elemento, en un paso como se muestra a continuación.

<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 proporciona lectores y escritores para leer y escribir datos de varios sistemas de archivos / bases de datos como MongoDB, Neo4j, MySQL, XML, flatfile, CSV, etc.

Para incluir un lector en su aplicación, debe definir un bean para ese lector, proporcionar valores a todas las propiedades requeridas dentro del bean y pasar el id de tal bean como un valor para el atributo del elemento chunk reader (igual por writer).

ItemReader

Es la entidad de un paso (de un proceso por lotes) que lee datos. Un ItemReader lee un artículo a la vez. Spring Batch proporciona una interfazItemReader. Todosreaders implementar esta interfaz.

A continuación se muestran algunas de las clases ItemReader predefinidas proporcionadas por Spring Batch para leer de varias fuentes.

Lector Propósito
FlatFIleItemReader Para leer datos de archivos planos.
StaxEventItemReader Para leer datos de archivos XML.
StoredProcedureItemReader Leer datos de los procedimientos almacenados de una base de datos.
JDBCPagingItemReader Leer datos de bases de datos relacionales.
MongoItemReader Para leer datos de MongoDB.
Neo4jItemReader Para leer datos de Neo4jItemReader.

Necesitamos configurar el ItemReaderscreando los frijoles. A continuación se muestra un ejemplo deStaxEventItemReader que lee datos de un archivo XML.

<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>

Como se observó, durante la configuración, debemos especificar el nombre de clase respectivo del lector requerido y debemos proporcionar valores a todas las propiedades requeridas.

ItemWriter

Es el elemento de la stepde un proceso por lotes que escribe datos. Un ItemWriter escribe un elemento a la vez. Spring Batch proporciona una interfazItemWriter. Todos los escritores implementan esta interfaz.

A continuación se muestran algunas de las clases ItemWriter predefinidas proporcionadas por Spring Batch para leer de varias fuentes.

Escritor Propósito
FlatFIleItemWriter Para escribir datos en archivos planos.
StaxEventItemWriter Para escribir datos en archivos XML.
StoredProcedureItemWriter Escribir datos en los procedimientos almacenados de una base de datos.
JDBCPagingItemWriter Para escribir datos en bases de datos relacionales.
MongoItemWriter Para escribir datos en MongoDB.
Neo4jItemWriter Para escribir datos en Neo4j.

De la misma manera, necesitamos configurar ItemWriters creando los beans. A continuación se muestra un ejemplo deJdbcCursorItemReader que escribe datos en una base de datos MySQL.

<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>

Procesador de artículos

ItemProcessor: Se utiliza un ItemProcessor para procesar los datos. Cuando el artículo dado no es válido, regresanull, de lo contrario, procesa el elemento dado y devuelve el resultado procesado. La interfazItemProcessor<I,O> representa al procesador.

Tasklet class - Cuando no reader y writerse dan, un Tasklet actúa como un procesador para SpringBatch. Procesa una sola tarea.

Podemos definir un procesador de artículos personalizado implementando la interfaz ItemProcessor del paquete org.springframework.batch.item.ItemProcessor. Esta clase ItemProcessor acepta un objeto y procesa los datos y devuelve los datos procesados ​​como otro objeto.

En un proceso por lotes, si "n"se leen registros o elementos de datos, luego, para cada registro, leerá los datos, los procesará y los escribirá en el escritor. Para procesar los datos, se transmite al procesador pasado.

Por ejemplo, supongamos que ha escrito un código para cargar un documento PDF en particular, crear una nueva página, escribir el elemento de datos en el PDF en formato tabular. Si ejecuta esta aplicación, lee todos los elementos de datos del documento XML, los almacena en la base de datos MySQL y los imprime en el documento PDF dado en páginas individuales.

Ejemplo

A continuación se muestra una clase ItemProcessor de muestra.

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; 
   } 
}