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>