Spring Batch - Arquitetura

A seguir está a representação esquemática da arquitetura do Spring Batch. Conforme representado na figura, a arquitetura contém três componentes principais, a saber,Application, Batch Core, e Batch Infrastructure.

Application - Este componente contém todos os trabalhos e o código que escrevemos usando a estrutura Spring Batch.

Batch Core - Este componente contém todas as classes de API que são necessárias para controlar e iniciar um Batch Job.

Batch Infrastructure - Este componente contém os leitores, gravadores e serviços usados ​​pelos componentes principais do aplicativo e do Batch.

Componentes do Spring Batch

A ilustração a seguir mostra os diferentes componentes do Spring Batch e como eles estão conectados entre si.

Trabalho

Em um aplicativo Spring Batch, uma tarefa é o processo em lote que deve ser executado. Funciona do início ao fim sem interrupção. Este trabalho é dividido em etapas (ou um trabalho contém etapas).

Vamos configurar um trabalho no Spring Batch usando um arquivo XML ou uma classe Java. A seguir está a configuração XML de um trabalho no Spring Batch.

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

Um trabalho em lote é configurado nas tags <job> </job>. Tem um atributo chamadoid. Dentro dessas tags, definimos a definição e a ordem das etapas.

Restartable - Em geral, quando um trabalho está em execução e tentamos reiniciá-lo, isso é considerado restarte será reiniciado. Para evitar isso, você precisa definir orestartable valor para false como mostrado abaixo.

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

</job>

Degrau

UMA step é uma parte independente de um trabalho que contém as informações necessárias para definir e executar o trabalho (sua parte).

Conforme especificado no diagrama, cada etapa é composta por um ItemReader, ItemProcessor (opcional) e um ItemWriter. A job may contain one or more steps.

Leitores, escritores e processadores

A item reader lê dados em um aplicativo Spring Batch de uma fonte específica, enquanto um item writer grava dados do aplicativo Spring Batch em um destino específico.

A Item processoré uma classe que contém o código de processamento que processa os dados lidos no lote de primavera. Se o aplicativo lê"n" registros, então o código no processador será executado em cada registro.

Quando nenhum leitor e escritor são fornecidos, um taskletatua como um processador para SpringBatch. Ele processa apenas uma única tarefa. Por exemplo, se estivermos escrevendo um trabalho com uma etapa simples, onde lemos dados do banco de dados MySQL, processamos e gravamos em um arquivo (simples), então nossa etapa usa -

  • UMA reader que lê do banco de dados MySQL.

  • UMA writer que grava em um arquivo simples.

  • UMA custom processor que processa os dados conforme nosso desejo.

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

Spring Batch fornece uma longa lista de readers e writers. Usando essas classes predefinidas, podemos definir beans para elas. Vamos discutirreaders e writers em maiores detalhes nos próximos capítulos.

JobRepository

Um repositório de Job em Spring Batch fornece operações de Criar, Recuperar, Atualizar e Excluir (CRUD) para as implementações JobLauncher, Job e Step. Definiremos um repositório de trabalhos em um arquivo XML, conforme mostrado abaixo.

<job-repository id = "jobRepository"/>

Além de id, existem mais algumas opções (opcionais) disponíveis. A seguir está a configuração do repositório de tarefas com todas as opções e seus valores padrão.

<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 - Caso você não queira manter os objetos de domínio do Spring Batch no banco de dados, você pode configurar a versão na memória do jobRepository conforme mostrado abaixo.

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

JobLauncher

JobLauncher é uma interface que inicia o trabalho Spring Batch com o given set of parameters. SampleJoblauncher é a classe que implementa o JobLauncherinterface. A seguir está a configuração do JobLauncher.

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

JobInstance

UMA JobInstancerepresenta a execução lógica de um trabalho; ele é criado quando executamos um trabalho. Cada instância da tarefa é diferenciada pelo nome da tarefa e pelos parâmetros passados ​​a ela durante a execução.

Se a execução de JobInstance falhar, o mesmo JobInstance pode ser executado novamente. Portanto, cada JobInstance pode ter várias execuções de trabalho.

JobExecution e StepExecution

JobExecution e StepExecution são a representação da execução de um job / etapa. Eles contêm as informações de execução da tarefa / etapa, como hora de início (da tarefa / etapa), hora de término (da tarefa / etapa).