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

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>