일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Angular2
- 제주
- hdfs
- 엘라스틱서치
- intellij
- hadoop
- Spring
- Domain Driven Design
- Spring XD
- Gradle
- spark
- Hbase
- design pattern
- scala
- Clean Code
- docker
- Storm
- nginx
- Java
- elasticsearch
- Spring Batch
- hibernate
- Spring Boot
- Linux
- 스프링 배치
- apache storm
- DDD
- elastic search
- 도메인주도설계
- SBT
- Today
- Total
욱'S 노트
Spring Batch - JobRepository 구성하기 본문
JobRepository 구성하기
JobRepository는 spring batch의 jobExecution과 stepExecution과 같은 domain 오브젝트를 저장하기 위한 CRUD 기능을 위해 사용된다고 언급했다.
JobRepository는 JobLauncher, Job, Step과 같이 프레임워크는 주요한 특징이다.
<batch:job-repository id="jobRepository"
data-source="dataSource"
transaction-manager="transactionManager"
isolation-level-for-create="SERIALIZABLE" table-prefix="BATCH_"
max-varchar-length="1000"/>
Transaction Configuration for the JobRepository
네임스페이스를 이용하면, transaction 어드바이스는 repository에 자동적으로 적용된다. 실패후 재시작되었을 때 상태를 포함한 메타데이터를 정확하게 하기 위함이다.
작업이 구동되었을 때 create 작업을 수행하는 메소드에 대한 isolation level은 기본적으로 SERIALIZABLE이다. 이는 두개의 프로세서가 동시에 같은 작업을 구동했을때, 오직 하나만 성공할 수 있도록 하기 위함이다. 그러나 다른 isolation level 또한 지정할 수 있는데, READ_COMMITTED의 경우 잘 동작할 것이나, READ_UNCOMMITED의 경우에는 두개의 프로세스가 동시에 작업을 구동할 경우를 제외하곤 잘 동작할 것이다. 네임스페이스에는 아래와 같은 내용을 포함하고 있다고 생각하면 된다.
<aop:config>
<aop:advisor pointcut="execution(* org.springframework.batch.core..*Repository+.*(..))"
advice-ref="txAdvice"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
Changing Table prefix
기존 비즈니스적으로 사용하는 테이블과 구분하기 위해서, table prefix도 변경할 수 있다.
In-Memory Repository
굳이 데이터베이스에 메타데이터를 기록하고 싶지 않다면, 메모리에 메타데이터를 저장할 수도 있다. 설정은 아래와 같이 수행하면 된다.
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
</bean>
만약 RDBMS를 사용하지 않더라도 SimpleJobRepository에 다양한 Dao를 구현하여 구성한다면 다양한 방식으로 커스터마이징할 수 있다.
Configuring a JobRepository
일단 In-Memory의 경우는 별도의 설치과정이 필요 없지만, RDBMS를 JobRepository로 사용하기 위해서는 테이블을 생성해야 한다. 생성 테이블 스크립트는 spring-batch-core-<version>.jar에 압축하여 같이 제공되고 있다. schema-<db제품명>.sql으로 제공된 파일을 이용하여 스키마를 생성하자.
실제적으로 수행해보면 아래와 같이 실행이력들이 잘 저장되는 것을 확인할 수 있다.
'Programming > Spring Batch' 카테고리의 다른 글
Spring Batch - 메타데이터 이용 (0) | 2015.01.22 |
---|---|
Spring Batch - 작업실행 (0) | 2015.01.22 |
Spring Batch - 작업정의 (1) | 2015.01.22 |
Spring Batch - 도메인 (0) | 2015.01.21 |
Spring Batch - 소개 (0) | 2015.01.16 |