반응형

스프링 배치(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"/>

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기