Spring Batch: Conceptos

Ahí va un post de esos de copiar y pegar 🙂

Qué es una Aplicación Batch:

  • Las aplicaciones Batch necesitan procesar grandes volúmenes de datos críticos de negocio de forma transaccional
  • Un programa típico Batch normalmente:
    • Lee un gran número de datos de una base de datos, ficheros o cola
    • Procesa los datos de alguna forma
    • Escribe los datos modificados

Spring Batch:

  • es el primer framework Java para procesamiento Batch
  • provee un framework altamente escalable, sencillo de usar y personalizable para desarrollo de aplicaciones Batch
  • Spring Batch se basa en los patrones y prácticas de Spring permitiendo a los desarrolladores centrarse en la lógica de negocio.
  • Versiones:
    • 1.0 Febrero 2008
    • 1.1 Agosto 2008
    • 2.0 Abril 2009

Escenarios de uso de Aplicaciones Batch

  • Commit batch periódicos
  • Procesamiento batch concurrente
  • Procesamiento masivo y en paralelo
  • Reinicio manual o temporizado tras fallo
  • Procesamiento secuencial de pasos dependientes (workflow-driven)
  • Procesamiento parcial

Opciones de Procesamiento batch:

  • Procesamiento normal en Batch dutante offline
  • Batch concurrente / online
  • Procesamiento en paralelo de varios Jobs a la vez
  • Particionamiento: varias instancias del mismo Job a la vez

Por su fuente de entrada se pueden categorizar por:

  • Aplicaciones Database-driven: dirigidas por valores recuperados de una BD
  • Aplicaciones File-driven
  • Aplicaciones Message-driven
  • Aplicaciones Workflow-driven

CONCEPTOS SPRING BATCH

  • Job:
    • Entidad para encapsular todo un proceso batch.
    • Compuesto de una serie de pasos (Steps) que tienen una relación lógica
  • JobInstance:
    • Es la ejecución de un Job
    • Cada JobInstance puede tener múltiples intentos de ejecución (JobExecution)
    • El JobInstance se considera terminado cuando alguno de sus intentos de ejecución tuvo éxito
  • JobExecution:
    • Es el intento de ejecución de un JobInstance, terminado con éxito o no
    • Un JobInstace solo se considera terminado cuando alguno de sus JobExecution ha terminado con éxito.
    • Tiene las siguientes propiedades:
      • Status
      • startTime, endTime,
      • createTime, lastUpdate
      • executionContext :valores que mete usuario para persistirse entre ejecuciones)
      • failureException: excepciones durante la ejecución
  • Step:
    • objeto de dominio que encapsula de manera independiente una de toda la secuencia de fases de un Job
  • StepExecution:
    • representa un intento de ejecutar un Step
    • Se crea una instancia de StepExecution cada vez que se intenta ejecutar un Step
    • si un Step falla porque un Step anterior fallo no se persistira su ejecucion
    • Tiene las siguientes propiedades:
      • Status, exitStatus
      • startTime, endTime
      • executionContext
      • readCount, writeCount
      • commitCount, rollbackCount
      • readSkipCount, processSkipCount, writeSkipCount
  • ExecutionContext:
    • Colección de elementos llave/valor que son persistidos y controlados por el propio framework que permiten al desarrollador almacenar valores que son persistidos y que están dentro del alcance de un StepExecution o un JobExecution
    • Permite almacenar valores que permiten el reinicio de procesos desde un punto en particular.
  • JobRepository:
    • Es el mecanismo de persistencia que usan los ExecutionContext para los StepExecution y JobExecution
  • Contiene operaciones CRUD

JobLauncher: representa el mecanismo para ejecutar un Job con ciertos JobParameters. ItemReader: Representa el obtener datos de entrada para un Step, un elemento (item) a la vez Cuando el ItemReader ha acabado de obtener los elementos indica que ya no hay más elementos que tomar regresando null. Varias implementaciones out-of-the-box ItemWriter: Representa la salida de un Step, un elemento a la vez. Varias implementaciones out-of-the-box ItemProcessor: representa el procesamiento de un elemento Mientras el ItemReader lee un elemento y el ItemWriter lo escribe, el ItemProcessor aplica transformaciones u otras reglas. Si el ItemProcessor determina que un elemento no es valido regresa null para indicar que el elemento no debe ser escrito

Modelo de Datos

Ejemplo:

Tipos de Ejecución:

Arquitectura Tipo: