DataSource pro JobRepository

JobRepository je používána pro základní CRUD (Create, Read, Update, Delete) operace nad určitými objekty (domain objekty) frameworku Spring Batch. Jednoduše řečeno, Spring Batch si zde ukládá potřebné informace o jobech (Job) a jednotlivých krocích jobu (Step). V případě, že tyto informace nepotřebujeme, nabízí Spring Batch in-memory implementaci pomocí mapy. Tento způsob jsem zatím používal ve všech předchozí Spring Batch příkladech.

<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
	<property name="transactionManager" ref="transactionManager" />
</bean>

V případě, že chceme batch objekty ukládat, je potřeba nadefinovat data source. Zde je příklad pro databázi PostgreSQL.

<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<beans:property name="driverClassName" value="org.postgresql.Driver" />
	<beans:property name="url" value="jdbc:postgresql://localhost:5432/database" />
	<beans:property name="username" value="username" />
	<beans:property name="password" value="password" />
</beans:bean>

Za database, username, password zadejte validní data.

Pokud máte novou databázi, určitě v ní nebudete mít vytvořeny potřebné tabulky:

  • BATCH_STEP_EXECUTION
  • BATCH_JOB_EXECUTION_CONTEXT
  • BATCH_JOB_EXECUTION_PARAMS
  • BATCH_JOB_INSTANCE
  • BATCH_JOB_EXECUTION
  • BATCH_STEP_EXECUTION_CONTEXT

spring_batch_tables

Skripty pro vytvoření (a smazání) tabulek (a sekvencí) naleznete v balíčku org.springframework.batch.core. Aktuálně jsou skripty připraveny pro tyto databáze:

  • db2
  • derby
  • h2
  • hsqldb
  • mysql
  • oracle
  • postgresql
  • sqlite
  • sqlserver
  • sybase

Skripty můžete spustit buď manuálně, nebo při spuštění aplikace. Pokud chcete skript spustit vždy při spuštění aplikace, přidejte do konfiguračního souboru (pro PostgreSQL):

<jdbc:initialize-database data-source="dataSource">
	<jdbc:script location="org/springframework/batch/core/schema-drop-postgresql.sql" />
	<jdbc:script location="org/springframework/batch/core/schema-postgresql.sql" />
</jdbc:initialize-database>

Pozor na to, že při každém spuštění aplikace se v tomto případě dropnou a znovu vytvoří všechny tabulky.

Zde je celá konfigurace včetně jobRepository, transactionManager a vytvoření tabulek pro PostgreSQL.

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans 
	xmlns="http://www.springframework.org/schema/batch"
	xmlns:beans="http://www.springframework.org/schema/beans" 
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
                http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd 
		http://www.springframework.org/schema/batch 
		http://www.springframework.org/schema/batch/spring-batch.xsd
		http://www.springframework.org/schema/jdbc
		http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

	<!-- Beans definition -->
	<beans:bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
		<beans:property name="transactionManager" ref="transactionManager" />
		<beans:property name="dataSource" ref="dataSource" />
	</beans:bean>

	<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="org.postgresql.Driver" />
		<beans:property name="url" value="jdbc:postgresql://localhost:5432/postgres" />
		<beans:property name="username" value="postgres" />
		<beans:property name="password" value="password" />
	</beans:bean>

	<beans:bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<beans:property name="dataSource" ref="dataSource"></beans:property>
	</beans:bean>

	<jdbc:initialize-database data-source="dataSource">
		<jdbc:script location="org/springframework/batch/core/schema-drop-postgresql.sql" />
		<jdbc:script location="org/springframework/batch/core/schema-postgresql.sql" />
	</jdbc:initialize-database>
</beans:beans>

Napsat komentář