Spring Batch - Architettura

Di seguito è riportata la rappresentazione schematica dell'architettura di Spring Batch. Come illustrato nella figura, l'architettura contiene tre componenti principali e cioè,Application, Batch Core, e Batch Infrastructure.

Application - Questo componente contiene tutti i lavori e il codice che scriviamo utilizzando il framework Spring Batch.

Batch Core - Questo componente contiene tutte le classi API necessarie per controllare e avviare un lavoro batch.

Batch Infrastructure - Questo componente contiene i lettori, i writer e i servizi utilizzati sia dall'applicazione che dai componenti principali di Batch.

Componenti di Spring Batch

La seguente illustrazione mostra i diversi componenti di Spring Batch e il modo in cui sono collegati tra loro.

Lavoro

In un'applicazione Spring Batch, un lavoro è il processo batch che deve essere eseguito. Funziona dall'inizio alla fine senza interruzioni. Questo lavoro è ulteriormente suddiviso in passaggi (o un lavoro contiene passaggi).

Configureremo un lavoro in Spring Batch utilizzando un file XML o una classe Java. Di seguito è riportata la configurazione XML di un lavoro in Spring Batch.

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

Un lavoro batch viene configurato all'interno dei tag <job> </job>. Ha un attributo denominatoid. All'interno di questi tag, definiamo la definizione e l'ordine dei passaggi.

Restartable - In generale, quando un lavoro è in esecuzione e proviamo a riavviarlo, viene considerato come restarte verrà riavviato. Per evitare ciò, è necessario impostare il filerestartable valore a false come mostrato di seguito.

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

</job>

Passo

UN step è una parte indipendente di un lavoro che contiene le informazioni necessarie per definire ed eseguire il lavoro (la sua parte).

Come specificato nel diagramma, ogni passaggio è composto da un ItemReader, ItemProcessor (opzionale) e un ItemWriter. A job may contain one or more steps.

Lettori, scrittori e processori

Un item reader legge i dati in un'applicazione Spring Batch da una particolare origine, mentre un file item writer scrive i dati dall'applicazione Spring Batch in una particolare destinazione.

Un Item processorè una classe che contiene il codice di elaborazione che elabora i dati letti nel batch di primavera. Se l'applicazione legge"n" record, quindi il codice nel processore verrà eseguito su ogni record.

Quando non viene fornito né lettore né scrittore, a taskletfunge da processore per SpringBatch. Elabora solo una singola attività. Ad esempio, se stiamo scrivendo un lavoro con un semplice passaggio in esso in cui leggiamo i dati dal database MySQL e li elaboriamo e li scriviamo in un file (flat), il nostro passaggio utilizza:

  • UN reader che legge dal database MySQL.

  • UN writer che scrive su un file flat.

  • UN custom processor che elabora i dati secondo il nostro desiderio.

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

Spring Batch fornisce un lungo elenco di readers e writers. Usando queste classi predefinite, possiamo definire i bean per loro. Noi discuteremoreaders e writers in maggiore dettaglio nei prossimi capitoli.

JobRepository

Un repository di lavori in Spring Batch fornisce operazioni di creazione, recupero, aggiornamento ed eliminazione (CRUD) per le implementazioni JobLauncher, Job e Step. Definiremo un repository di lavori in un file XML come mostrato di seguito.

<job-repository id = "jobRepository"/>

Inoltre id, sono disponibili altre opzioni (opzionali). Di seguito è riportata la configurazione del repository dei lavori con tutte le opzioni ei loro valori predefiniti.

<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 - Nel caso in cui non si desideri rendere persistenti gli oggetti del dominio di Spring Batch nel database, è possibile configurare la versione in memoria del jobRepository come mostrato di seguito.

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

JobLauncher

JobLauncher è un'interfaccia che avvia il lavoro Spring Batch con l'estensione given set of parameters. SampleJoblauncher è la classe che implementa il JobLauncherinterfaccia. Di seguito è riportata la configurazione di JobLauncher.

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

JobInstance

UN JobInstancerappresenta l'esecuzione logica di un lavoro; viene creato quando eseguiamo un lavoro. Ciascuna istanza di lavoro è differenziata dal nome del lavoro e dai parametri ad essa passati durante l'esecuzione.

Se l'esecuzione di JobInstance non riesce, la stessa JobInstance può essere eseguita di nuovo. Quindi, ogni JobInstance può avere più esecuzioni di lavoro.

JobExecution e StepExecution

JobExecution e StepExecution sono la rappresentazione dell'esecuzione di un lavoro / passo. Contengono le informazioni di esecuzione del lavoro / passo come l'ora di inizio (del lavoro / passo), l'ora di fine (del lavoro / passo).