Spring Batch - Architecture

Voici la représentation schématique de l'architecture de Spring Batch. Comme le montre la figure, l'architecture contient trois composants principaux à savoir,Application, Batch Core, et Batch Infrastructure.

Application - Ce composant contient tous les jobs et le code que nous écrivons à l'aide du framework Spring Batch.

Batch Core - Ce composant contient toutes les classes d'API nécessaires pour contrôler et lancer un travail par lots.

Batch Infrastructure - Ce composant contient les lecteurs, les rédacteurs et les services utilisés par les composants principaux de l'application et de Batch.

Composants de Spring Batch

L'illustration suivante montre les différents composants de Spring Batch et comment ils sont connectés les uns aux autres.

Emploi

Dans une application Spring Batch, un travail est le processus par lots qui doit être exécuté. Il fonctionne du début à la fin sans interruption. Ce travail est divisé en étapes (ou un travail contient des étapes).

Nous allons configurer un travail dans Spring Batch à l'aide d'un fichier XML ou d'une classe Java. Voici la configuration XML d'un Job dans Spring Batch.

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

Un travail Batch est configuré dans les balises <job> </job>. Il a un attribut nomméid. Au sein de ces balises, nous définissons la définition et l'ordre des étapes.

Restartable - En général, lorsqu'un job est en cours et que nous essayons de le relancer, cela est restartet il sera recommencé. Pour éviter cela, vous devez définir lerestartable valeur à false comme indiqué ci-dessous.

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

</job>

Étape

UNE step est une partie indépendante d'un travail qui contient les informations nécessaires pour définir et exécuter le travail (sa partie).

Comme spécifié dans le diagramme, chaque étape est composée d'un ItemReader, d'un ItemProcessor (facultatif) et d'un ItemWriter. A job may contain one or more steps.

Lecteurs, rédacteurs et processeurs

Un item reader lit les données dans une application Spring Batch à partir d'une source particulière, alors qu'un item writer écrit les données de l'application Spring Batch vers une destination particulière.

Un Item processorest une classe qui contient le code de traitement qui traite les données lues dans le lot de ressorts. Si l'application lit"n" enregistrements, puis le code dans le processeur sera exécuté sur chaque enregistrement.

Lorsqu'aucun lecteur ni écrivain n'est donné, un taskletagit en tant que processeur pour SpringBatch. Il ne traite qu'une seule tâche. Par exemple, si nous écrivons un travail avec une étape simple dans laquelle nous lisons les données de la base de données MySQL et les traitons et les écrivons dans un fichier (plat), alors notre étape utilise -

  • UNE reader qui lit à partir de la base de données MySQL.

  • UNE writer qui écrit dans un fichier plat.

  • UNE custom processor qui traite les données selon notre souhait.

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

Spring Batch fournit une longue liste de readers et writers. En utilisant ces classes prédéfinies, nous pouvons définir des beans pour elles. Nous discuteronsreaders et writers plus en détail dans les prochains chapitres.

JobRepository

Un référentiel de travaux dans Spring Batch fournit des opérations de création, de récupération, de mise à jour et de suppression (CRUD) pour les implémentations JobLauncher, Job et Step. Nous définirons un référentiel de travaux dans un fichier XML comme indiqué ci-dessous.

<job-repository id = "jobRepository"/>

En plus de id, d'autres options (facultatives) sont disponibles. Voici la configuration du référentiel de travaux avec toutes les options et leurs valeurs par défaut.

<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 - Si vous ne souhaitez pas conserver les objets de domaine du Spring Batch dans la base de données, vous pouvez configurer la version en mémoire du jobRepository comme indiqué ci-dessous.

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

JobLauncher

JobLauncher est une interface qui lance le travail Spring Batch avec le given set of parameters. SampleJoblauncher est la classe qui implémente le JobLauncherinterface. Voici la configuration du JobLauncher.

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

JobInstance

UNE JobInstancereprésente l'exécution logique d'un travail; il est créé lorsque nous exécutons un travail. Chaque instance de travail est différenciée par le nom du travail et les paramètres qui lui sont transmis lors de l'exécution.

Si une exécution de JobInstance échoue, la même JobInstance peut être exécutée à nouveau. Par conséquent, chaque JobInstance peut avoir plusieurs exécutions de travaux.

JobExecution et StepExecution

JobExecution et StepExecution sont la représentation de l'exécution d'un travail / d'une étape. Ils contiennent les informations d'exécution du travail / de l'étape telles que l'heure de début (du travail / de l'étape), l'heure de fin (du travail / de l'étape).