EasyBatch, les batchs en JAVA tout simplement.

EasyBatch est un framework JAVA qui a pour but de simplifier la création de batch. Pour cela, il va faire en sorte de libérer le développeur des tâches ne faisant pas partie de la logique métier (lecture/écriture de fichier, filtres, validation...).

Points forts

  • Léger : Aucune dépendance et JAR très léger (112 ko).
  • Rapide : Exécution en parallèle pour augmenter la rapidité.
  • Modulaire : Possibilité de créer ses propres composants (parser, validator, writer...).

Principe de fonctionnement

EasyBatch utilise une couche d'abstraction pour la manipulation des données (appelées "Record") entre chaque étapes du processus du batch.

En implémentant l'interface "Record", ils peuvent ainsi représenter un fichier (classe FileRecord), une ligne d'un fichier (classe StringRecord) ou une ligne d'une table en base de données (classe JDBCRecord). Il est aussi possible d'implémenter cette interface pour créer ses propres Record.

Les étapes du job sont effectuées par différents types de composant. Il en existe 8 différents :

  • Reader : Récupère des "Record" depuis une source de données (fichier, base de données...).
  • Filter : Filtre les "Record" selon une règle (exemple : EmptyRecordFilter filtre les "Record" vide).
  • Mapper : Construit un objet POJO à partir d'un "Record".
  • Processor : C'est ce composant qui contient la logique métier du batch.
  • Marshaller : Transforme un objet POJO en "Record".
  • Validator : Permet de faire une validation des "Record"
  • Writer : Exporte les "Record" vers leur destination (fichier, base de données...).
  • Listener : Permet d'ajouter un comportement spécifique autour d'un job ou d'un composant (reader, writer, processor...)

Comme pour les Record, Il est possible de créer ses propres composants en implémentant l'interface associée. Par exemple pour les Reader on utilisera l'interface "RecordReader", pour les Filter, l'interface "RecordFilter", etc...

Passons au code !

Installation

EasyBatch nécessite la version 1.7 ou supérieure de JAVA.

Voici la dépendance maven à utiliser :

<dependency>
    <groupId>org.easybatch</groupId>
    <artifactId>easybatch-core</artifactId>
    <version>5.0.0</version>
</dependency>

Construction

La première étape consiste à construire le Job.

Job job = JobBuilder.aNewJob()
    .named("myJob")
    .build();

Ensuite, on va lui passer les différents composants de notre batch dans leur ordre d'exécution.

Job job = JobBuilder.aNewJob()
    .named("myJob")
    .reader(new JdbcRecordReader(ds, "select * from client"))
    .mapper(new JdbcRecordMapper(Client.class))
    .marshaller(new DelimitedRecordMarshaller(Client.class))
    .writer(new FileRecordWriter("client.csv"))
    .build();
Exemple d'extraction d'une table sous la forme d'un fichier CSV.

Pour des traitements spécifiques, on peut aussi utiliser un Processor créé auparavant en implémentant RecordProcessor et/ou implémenter l'interface de n'importe quel autre type de composant.

job = new JobBuilder()
	.reader(new MyFileReader("input.txt"))
	.processor(new MyProcessor())
	.writer(new FileRecordWriter("output.csv"))
	.build();
Exemple avec des composants persos.

Exécution

Une fois le job initialisé, il peut être exécuté de manière synchrone ou asynchrone.

JobExecutor jobExecutor = new JobExecutor();
JobReport jobReport = jobExecutor.execute(job);
Synchrone
JobExecutor jobExecutor = new JobExecutor();
Future<JobReport> jobReport = jobExecutor.submit(job);
Asynchrone

Rapport d'exécution

On peut voir que les exécutions des jobs nous retournent des objets de type "JobReport". Ces objets, peuvent être mis en forme pour afficher un rapport d'exécution du job.

String htmlReport = new HtmlJobReportFormatter().formatReport(report);
Exemple sous forme HTML

 

Que vaut EasyBatch face à Spring Batch ?

Sa facilité d’appréhension, sa légèreté et sa rapidité sont les points forts de EasyBatch.

Dans la plupart des cas de batch "simples", ceux-ci seront plus rapides à créer et se montrerons plus performant qu'avec SpringBatch.

Un comparatif entre EasyBatch et SpringBatch a été effectué ici.

En revanche, lorsque les batchs deviennent plus complexe, SpringBatch reste plus complet en apportant plus de fonctionnalités et est notamment mieux adapté lorsqu'il s'agit de créer des batchs dans une application utilisant déjà du Spring.

En effet, EasyBatch peut perdre quelque peu de son intérêt lorsqu'il est nécessaire de redévelopper trop de composants. La force d'EasyBatch résidant dans ses composants pré-existants.

Pour résumer, EasyBatch est une bonne alternative à SpringBatch lorsqu'on rencontre le besoin de créer des nouveaux batchs relativement simples en dehors d'un contexte Spring.

Liens utiles

http://www.easybatch.org/

https://github.com/j-easy/easy-batch

 

Un commentaire

  1. Les jobs ou batches sont une problématique récurrente dans les applications. Classiquement, on a besoin de traitement batch pour injecter/extraire des données depuis un SGBDR, certains réseaux sociaux par exemple ont un gros besoin de batch.pour bien comprendre comment appliquer cette technique je vous invite à une Formation Java : https://www.mindtechub.com/formation-programmation.html

Laisser un commentaire

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

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.