Ejemplo Spring Batch

Introducción

El procesamiento por lotes es un método de ejecución de tareas de datos repetitivas y de gran volumen. El método por lotes permite a los usuarios procesar datos cuando se disponga de recursos informáticos y con poca o nula interacción del usuario. La principal ventaja frente al procesamiento en flujo es la capacidad de tratar datos rápidamente, minimizar o eliminar la necesidad de interacción con el usuario y mejorar la eficiencia del procesamiento de tareas.  Entre los entornos disponibles para realizar el procesamiento por lotes, encontramos Spring Batch, el entorno escogido como referencia para el desarrollo en aplicaciones Java.

Spring Batch es un marco de trabajo por lotes liviano e integral diseñado para permitir el desarrollo de aplicaciones de lotes robustas vitales para las operaciones diarias de los sistemas empresariales. Spring Batch se basa en las características de Spring Framework que la gente espera, al tiempo que facilita a los desarrolladores acceder y aprovechar servicios empresariales más avanzados cuando sea necesario. Spring Batch no es un marco de programación.

Estructura del proyecto

El proyecto con el que vamos a tratar se encarga de un procesamiento de datos muy sencillo, en el que obtiene datos de una clase de entrada, y se los introduce a una clase de salida, y posteriormente, imprime en un fichero estos mismo datos acompañados de una linea de cabecera y otra de pie. Al ser un caso de prueba sencillo, la aplicación lanzará un único job incluido en un step, y el procesamiento será local.

La aplicación se compone de una clase principal que lanza la misma, un paquete model con las clases utilizadas, y un paquete configuration que realiza el procesamiento, un paquete model para las clases utilizadas, y un paquete configuration para la configuración del procesamiento.

Para el correcto funcionamiento del proyecto, debemos de crear un par de clases con varios atributos, que servirán para guardar la entrada y la salida del procesamiento. Podemos encontrar estas clases en Batchexample/model. Sus nombres son DataIn y DataOut. 

Entre las clases en el paquete Batchexample/configuration se encuentran las siguientes:

  • CustomItemProcessor.java: Se encarga de, dada una instancia de la clase de entrada, crear una instancia de la clase de salida con los mismos valores que la de entrada y devolverla.

  • CustomRowMApper.java: Se encarga de crear una instancia de la clase de entrada y asignar unos valores por defecto a sus atributos.

  • JobBatchConfiguration.java:  Esta es la clase de configuración del procesamiento por lotes en sí. Se compone de varios Beans que gestionan cada uno de los procesos de configuración. 

    • reader: En caso de estar utilizando base de datos SQL, obtiene la información del mismo.

    • processor: instancia de la clase CustomItemProcessor.java antes mencionada.

    • writer: es el encargado de generar un fichero de texto en la ruta deseada (debemos especificar una ruta) , además de realizar el procesamiento de los datos e incluirlos en el fichero. También incluye las funciones que añadirían la cabecera y el pie en el caso de ser llamadas.

    • sqlExecuteJob: Este Bean se encarga de crear un job mediante un builderFactoryJob determinado. También podemos especificar su nombre, el step al cual está asociado, y el listener con el cual se activará. Devuelve el job ya creado.

    • step1: Este Bean se encarga de crear un stepmediante un stepBuilderFactory determinado, y le debemos especificar también el modo y lugar de lectura y escritura, es decir, los beans reader y writer anteriormente mencionados. La función admite un nombre para el step, y tras ser creado lo devuelve.

  • JobCompletionNotificationListener.java: En este componente se realiza la función de comprobación de finalización del procesamiento por lotes. Imprimirá un mensaje de éxito por consola si el estado de la ejecución ha sido COMPLETED.

Si probamos a ejecutar el proyecto como Java Application, podemos ver logs de como el job1 es creado y, posteriormente, como el step1 es ejecutado. Justo después, vemos el mensaje que lanza JobCompletionNotificationListener para comprobar que el job ha sido completado satisfactoriamente.

Descarga del proyecto

A continuación se proporciona el enlace al repositorio de Git, donde puedes encontrar el proyecto anteriormente mencionado:

SpringBatch-example

http://gitlab-ssdd.onesaitplatform.com/onesait/onesait-architecture/examples/springbatch-example.git