Spring Batch - Arquitectura

A continuación se muestra la representación esquemática de la arquitectura de Spring Batch. Como se muestra en la figura, la arquitectura contiene tres componentes principales, a saber,Application, Batch Corey Batch Infrastructure.

Application - Este componente contiene todos los trabajos y el código que escribimos usando el marco Spring Batch.

Batch Core - Este componente contiene todas las clases de API que se necesitan para controlar y lanzar un trabajo por lotes.

Batch Infrastructure - Este componente contiene los lectores, escritores y servicios utilizados por la aplicación y los componentes principales de Batch.

Componentes de Spring Batch

La siguiente ilustración muestra los diferentes componentes de Spring Batch y cómo están conectados entre sí.

Trabajo

En una aplicación Spring Batch, un trabajo es el proceso por lotes que se va a ejecutar. Funciona de principio a fin sin interrupción. Este trabajo se divide en pasos (o un trabajo contiene pasos).

Configuraremos un trabajo en Spring Batch usando un archivo XML o una clase Java. A continuación se muestra la configuración XML de un trabajo en Spring Batch.

<job id = "jobid"> 
   <step id = "step1" next = "step2"/> 
   <step id = "step2" next = "step3"/> 
   <step id = "step3"/> 
</job>

Un trabajo por lotes se configura dentro de las etiquetas <job> </job>. Tiene un atributo llamadoid. Dentro de estas etiquetas, definimos la definición y el orden de los pasos.

Restartable - En general, cuando se está ejecutando un trabajo e intentamos iniciarlo de nuevo, se considera restarty se iniciará de nuevo. Para evitar esto, debe configurar elrestartable valor para false Como se muestra abajo.

<job id = "jobid" restartable = "false" >

</job>

Paso

UN step es una parte independiente de un trabajo que contiene la información necesaria para definir y ejecutar el trabajo (su parte).

Como se especifica en el diagrama, cada paso se compone de un ItemReader, ItemProcessor (opcional) y un ItemWriter. A job may contain one or more steps.

Lectores, escritores y procesadores

Un item reader lee datos en una aplicación Spring Batch 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 en el procesador se ejecutará en cada registro.

Cuando no se da ningún lector y escritor, taskletactúa como procesador para SpringBatch. Procesa solo una tarea. Por ejemplo, si estamos escribiendo un trabajo con un simple paso en el que leemos datos de la base de datos MySQL, los procesamos y los escribimos en un archivo (plano), entonces nuestro paso usa:

  • UN reader que lee de la base de datos MySQL.

  • UN writer que escribe en un archivo plano.

  • UN custom processor que procesa los datos según nuestro deseo.

<job id = "helloWorldJob"> 
   <step id = "step1"> 
      <tasklet> 
         <chunk reader = "mysqlReader" writer = "fileWriter" 
            processor = "CustomitemProcessor" ></chunk> 
      </tasklet> 
   </step> 
</ job>

Spring Batch proporciona una larga lista de readers y writers. Usando estas clases predefinidas, podemos definir beans para ellas. Discutiremosreaders y writers con mayor detalle en los capítulos siguientes.

JobRepository

Un repositorio de trabajos en Spring Batch proporciona operaciones de creación, recuperación, actualización y eliminación (CRUD) para las implementaciones de JobLauncher, Job y Step. Definiremos un repositorio de trabajos en un archivo XML como se muestra a continuación.

<job-repository id = "jobRepository"/>

Además de id, hay algunas opciones más (opcionales) disponibles. A continuación se muestra la configuración del repositorio de trabajos con todas las opciones y sus valores predeterminados.

<job-repository id = "jobRepository" 
   data-source = "dataSource" 
   transaction-manager = "transactionManager" 
   isolation-level-for-create = "SERIALIZABLE" 
   table-prefix = "BATCH_" 
   max-varchar-length = "1000"/>

In-Memory Repository - En caso de que no desee conservar los objetos de dominio de Spring Batch en la base de datos, puede configurar la versión en memoria del jobRepository como se muestra a continuación.

<bean id = "jobRepository" 
   class = "org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean ">
   <property name = "transactionManager" ref = "transactionManager"/>
</bean>

JobLauncher

JobLauncher es una interfaz que lanza el trabajo de Spring Batch con el given set of parameters. SampleJoblauncher es la clase que implementa el JobLauncherinterfaz. A continuación se muestra la configuración de JobLauncher.

<bean id = "jobLauncher" 
   class = "org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
   <property name = "jobRepository" ref = "jobRepository" /> 
</bean>

JobInstance

UN JobInstancerepresenta la ejecución lógica de un trabajo; se crea cuando ejecutamos un trabajo. Cada instancia de trabajo se diferencia por el nombre del trabajo y los parámetros que se le pasan mientras se ejecuta.

Si falla la ejecución de JobInstance, se puede volver a ejecutar el mismo JobInstance. Por lo tanto, cada JobInstance puede tener varias ejecuciones de trabajos.

JobExecution y StepExecution

JobExecution y StepExecution son la representación de la ejecución de un trabajo / paso. Contienen la información de ejecución del trabajo / paso, como la hora de inicio (del trabajo / paso), la hora de finalización (del trabajo / paso).