Diferencia entre revisiones de «Spring Batch»
(→JobRepositoryFactoryBean) |
(→Ver también) |
||
Línea 78: | Línea 78: | ||
== Ver también == | == Ver también == | ||
* [http://www.dosideas.com/java/214-les-presentamos-spring-batch.html Introducción a Spring Batch] | * [http://www.dosideas.com/java/214-les-presentamos-spring-batch.html Introducción a Spring Batch] | ||
+ | * [http://www.dosideas.com/descargas/doc_download/9-demo-de-spring-batch.html Descargar proyecto con varios ejemplos] | ||
* [http://static.springframework.org/spring-batch/ Web oficial de Spring Batch] | * [http://static.springframework.org/spring-batch/ Web oficial de Spring Batch] | ||
* [http://static.springframework.org/spring-batch/spring-batch-docs/index.html Manual de Spring Batch] | * [http://static.springframework.org/spring-batch/spring-batch-docs/index.html Manual de Spring Batch] |
Revisión del 13:21 8 sep 2008
Spring Batch es el framework para procesamiento de lotes de Spring Framework. Este framework apunta a crear una plataforma que brinde servicios comunes para los programas batch.
Contenido
Arquitectura básica
El elemento principal de Spring Batch es el Job (Trabajo). Un Job representa un procesamiento batch a ejecutar. Un Job está compuesta de varios Step (Pasos), que se ejecutan en forma secuencial.
El mismo Job puede configurarse con distintos parámetros que lo diferencian (por ejemplo, la fecha de ejecución). Esto se conoce como JobInstance. Así, un JobInstance es la particularización de un Job con un conjunto de datos determinados.
La ejecución de un JobInstance es un JobExecution. Así, un JobInstance puede tener asociados muchos JobExecution, uno por cada intento de ejecución (por ejemplo, 2 intentos fallidos y uno exitoso).
Además, Spring Batch lleva un registro de todas las ejecuciones y parámetros con las que se lanzaron los Job. El encargado de guardar estos registros es el JobRepository, que cuenta con una implementación para almacenar la información en una base de datos. Spring Batch utiliza un modelo de tablas propio para guardar la información de las corridas, tiempos, parámetros de invocación, pasos que se ejecutaron y otros datos.
Por último, el encargado de ejecutar los Job se llama JobLauncher.
JobRepository
El JobRepository es el encargado de almacenar información sobre las ejecuciones de los Job.
Existen dos implementaciones básicas de JobRepository: una que funciona en memoria (útil para desarrollo) y una que almacena la información en una base de datos.
MapJobRepositoryFactoryBean
Esta implementación almacena la información en memoria, en un Map. Es la forma más simple de configurar un JobRepository, ya que no necesita de una base de datos.
Su configuración:
<beans>
<bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/> <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"> <property name="transactionManager" ref="transactionManager"/> </bean>
</beans>
JobRepositoryFactoryBean
Esta es la implementación más usada para un JobRepository, y utiliza un modelo de datos propio de Spring Batch para almacenar la información de las ejecuciones en una base de datos.
Los scripts del modelo de datos para distintas bases de datos se puede encontrar en la raíz del archivo spring-batch-core-XXXXX.jar.
Su configuración requiere, por lo tanto, de un datasource asociado. En el siguiente ejemplo se utiliza un DataSource de una base de datos Apache Derby:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver"/> <property name="url" value="jdbc:derby://localhost:1527/springbatch"/> <property name="username" value="springbatch"/> <property name="password" value="springbatch"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean" p:databaseType="derby" p:dataSource-ref="dataSource" p:transactionManager-ref="transactionManager"/>
Los Step
Un Job está compuesto de varios Step que se ejecutan, inicialmente, de manera secuencial. El Step más común es el implementado por la clase SimpleStepFactoryBean, o por la clase TaskletStep.
SimpleStepFactoryBean
Esta clase crea Steps que constan de un "lector de datos" (ItemReader) y un "procesador de datos" (ItemWriter).
El ItemReader será un bean encargado de leer datos de algún origen. Cada dato leído será pasado al ItemWriter para su procesamiento.
Existen varias implementaciones de ItemReader y ItemWriter que ya trae Spring Batch. Estas implementaciones resuelven accesos comunes, como ser leer de una base de datos, lectura/escritura en archivos de texto, etc.
Además, es muy simple implementar un ItemReader o ItemWriter propio.
TaskletStep
Un Tasklet es una acción muy básica en Spring Batch, y se usa para realizar ejecuciones simples. Un Step que ejecuta un tasklet se implementa con la clase TaskletStep.