반응형
스프링 배치(Spring Batch) 환경을 조금씩 구성하면서, 1개의 job.xml에 모든 스프링 배치(Spring Batch)의 bean을 계속 주입하여 코드가 더러워지는 경우가 생겼다. 여러 개의 job.xml에서 공통적으로 주입하는 bean들을 1개의 root.xml을 만들어 관리하려고 이 글을 통해 기록한다. 스프링 배치(Spring Batch) 중복된 Bean 1개의 xml에서 정의하는 방법은 1개의 root.xml을 만들억 거기에 다 정의하고, import를 시키면 된다.
스프링 배치(Spring Batch) 중복된 Bean 1개의 xml에서 정의하는 방법
1. 1개의 context-batch.xml을 만든다.
- 이 context-batch.xml에는 스프링 배치(Spring Batch)를 돌릴 수 있게 공통적으로 사용하는 것들을 넣어둘 것이다. 예를 들어, 트랜잭션, taskExecutor, jobRepositroy, jobLauncher 등을 말이다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:batch="http://www.springframework.org/schema/batch"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="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-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<import resource="classpath:com/batch/config/datasource/A-datasource.xml" />
<import resource="classpath:com/batch/config/datasource/B-datasource.xml" />
<import resource="classpath:com/batch/config/datasource/C-datasource.xml" />
<import resource="classpath:com/batch/config/datasource/D-datasource.xml" />
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
<bean id="transactionManagerALL"
class="org.springframework.data.transaction.ChainedTransactionManager"
lazy-init="false">
<constructor-arg>
<list>
<ref bean="transactionManagerA" />
<ref bean="transactionManagerB" />
<ref bean="transactionManagerC" />
<ref bean="transactionManagerD" />
</list>
</constructor-arg>
</bean>
<!-- 스프링 배치의 metadata를 담당하는 빈. -->
<!-- <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"> -->
<!-- </bean> -->
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSourceBatch" />
<property name="transactionManager" ref="transactionManagerC" />
<property name="databaseType" value="ORACLE" />
<property name="isolationLevelForCreate" value="ISOLATION_DEFAULT" />
</bean>
<!-- 스프링 배치 job을 실행하는 빈. -->
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="transactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
<!-- 스프링 배치 job을 테스트할 때 쓰는 유틸리티. -->
<bean id="jobLauncherTestUtils"
class="org.springframework.batch.test.JobLauncherTestUtils" />
</beans>
위에서 스프링 배치(Spring Batch)의 jobLauncherTestUtils와 transactionManager, 다수의 트랜잭션을 1개로 묶은 ChainedTransactionmanager, jobRepository, jobLauncher, teskexecutor를 다 넣어놨다. 물론, 트랜잭션을 넣으면 각 datasource.xml은 딸려 들어간다.
이렇게 1곳으로 설정을 해놨으면, 이제 job.xml에서 import를 해주면 된다. 각 job.xml에 아래와 같이 xml을 import하면 된다.
<import resource="classpath:com/batch/config/demo/context-batch.xml"/>
반응형
최근댓글