Arrêt d’un STEP en cours d’exécution d’un JOB…

Spring-batch est un framework permettant de concevoir un Batch  robuste. Un Batch est en général un traitement exécuté en arrière plan et gérant des fonctions complexes ou des volumes de données importants.

Un Batch peut rencontrer des erreurs et devoir s’arrêter. Son statut peut être en échec (erreur technique ou règle de gestion non respectée) ou arrêté si l’erreur présentée n’est pas considérée comme telle.

A travers cet article, Nous allons donc voir comment arrêter un Batch sans le mettre en échec.

Chaque information traité dans cet article, est illustrée pour faciliter la compréhension de la solution.

Configuration du Batch et du STEP

Lorsqu’un JOB est exécuté, il est possible de surveiller ce qui se passe et de l’arrêter à tout moment si un problème technique ou fonctionnel survient. Pour les STEP composant le JOB c’est pareil…

Dans le fichier de configuration du JOB, il faut rajouter un listener aux STEP à surveiller et le déclarer.

Spring-batch fichier xml de configuration

Spring-batch fichier xml de configuration

Définition du processus d’écoute (Listener)

Ce listener étend de la classe StepListenerSupport et implémente la classe StepListener. De cette façon, la classe peut accéder au contexte d’exécution du STEP et utiliser les méthodes suivantes :

  • beforeRead = exécutée avant le traitement du READER
  • afterRead = exécutée après le traitement du READER
  • beforeProcess = exécutée avant le traitement du PROCESSOR
  • afterProcess = exécutée après le traitement du PROCESSOR
  • beforeWrite = exécutée avant le traitement du WRITER
  • afterWrite = exécutée après le traitement du WRITER
  • beforeStep = exécutée avant le lancement du STEP
  • afterStep = exécutée après le traitement du STEP
Classe représentant le traitement d'écoute d'un STEP

Classe représentant le traitement d’écoute d’un STEP

Dans chaque méthode, il est possible d’utiliser la fonction setTerminateOnly() pour avertir le JOB que le batch va être arrêté.

Attention, la méthode setTerminateOnly n’arrête pas le traitement du STEP. Si vous êtes au niveau de la méthode afterRead, il continuera d’exécuter le PROCESSOR et le WRITER.

Gestion du retour du Listener dans les différentes étapes du STEP

Pour contourner ce problème, il est possible de changer le statut d’exécution du STEP ou de mettre à jour une donnée de l’ITEM transitant entre le READER, le PROCESSOR et le WRITER, et de vérifier ces informations avant chaque traitement.

Classe décrivant le PROCESSOR d'un STEP

Classe décrivant le PROCESSOR d’un STEP

Classe décrivant le WRITER d'un STEP

Classe décrivant le WRITER d’un STEP 

 


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *