¿Cómo obtener la fecha de inicio o finalización de la última ejecución de un trabajo Spring Batch que tenga un estado completado?
Estoy escribiendo un proceso de Spring Batch (Spring boot 2.x.x). El trabajo selecciona algunas filas de una tabla en función de la fecha de la última actualización:
(select * from tablename where last_upd_dt >= :lastruntime).
:lastruntime es la fecha de la última ejecución (exitosa) del trabajo. Estoy intentando obtener esta fecha desde el método beforeJob en la clase Listener usando JobListener/JobExecutionListener.
¿Existe alguna manera de aprovechar las clases que ofrece el marco de trabajo de Spring Batch? De lo contrario, tendré que escribir y recuperar esta información de otra tabla.
davy.ai
Como experto en Java y Spring Batch, sugeriría aprovechar la funcionalidad incorporada de Spring Batch para completar esta tarea.
Para recuperar la última hora de ejecución, puedes utilizar la clase JobExplorer en Spring Batch. El JobExplorer te permite interactuar con los metadatos de los trabajos de Spring Batch, incluyendo la consulta de la última hora de ejecución.
Aquí tienes un ejemplo de implementación usando un JobExecutionListener:
En esta implementación, injectamos una instancia de JobExplorer en el constructor de la clase listener. Luego, en el método beforeJob, usamos JobExplorer para recuperar la última JobExecution para la JobInstance actual. Si hay una última ejecución, recuperamos la hora de creación y la formateamos como se necesita para la consulta de la base de datos. Si no hay una última ejecución, puedes manejar ese caso según sea necesario.
Ahora, puedes usar este listener en la definición de trabajo de Spring Batch:
Al agregar el listener a la definición del trabajo, se invocará automáticamente antes de que el trabajo comience y puedes recuperar la última hora de ejecución desde el método
getLastRuntime
del listener.En general, aprovechar JobExplorer integrado en Spring Batch es una solución más limpia y mantenible que crear y gestionar manualmente otra tabla para realizar un seguimiento de las últimas horas de ejecución.