Demo #6: Manejo de excepciones

La demo del paquete demo6 amplía la demo1 (lectura de archivo e impresión por consola), considerando que algunas líneas del archivo de entrada podrían ser incorrectas desde el punto de vista del formato y ese no debería ser motivo para finalizar el job, sino que se debería continuar con la siguiente línea del archivo. Es importante tener en cuenta que cualquier exception lanzada durante la ejecución del job por defecto corta la ejecución del mismo.

Las clases

La única clase destacada para esta demo es:

  • PlanetaItemListener. Por extender de la clase de spring batch ItemListenerSupport, en esta clase nos vemos obligados a implementar métodos abstractos para las acciones a seguir en caso de error en el reader, en el procesor y en el writer. Este listener es entonces un handler de los errores que sucedan durante la ejecución del job. En la demo sólo se imprime un warning por consola con las líneas del archivo que no pudieron ser parseadas correctamente.

La configuración

En el archivo de configuración spring-batch-demo.xml se ecuentra toda la configuración necesaria para Spring Batch. Beans importantes declarados en este archivo:

  • imprimirPorConsola, notemos que en esta demo para el step no estamos utilizando la implementación más básica de spring batch (SimpleStepFactoryBean) como en las demos anteriores. En su lugar estamos utilizando una implementación más compleja: FaultTolerantStepFactoryBean, que provee funcionalidad muy interesante para el manejo de fallos. Algunos de los atributos que pueden setearse son:
    • noRollbackExceptionClasses, indica la lista de excepciones “permitidas”: aquellas para las cuales no se corta la ejecución del job, sino que se continúa con el siguiente item sin realizar un rollback del chunk que se está procesando.
    • skipLimit, cantidad máxima de items que podrán saltearse debido a las excepciones “permitidas”.
    • listeners, lista de listeners asociados al step. En el ejemplo se ha desarrollado un listener como handler de errores (PlanetaItemListener). Spring batch provee otros tipos de listeners que podemos implementar, como ItemReadListener, que nos lleva a definir acciones a realizar antes del reader, después del reader y en caso de fallo en el reader. Para más información consultar la API de Spring Batch.