운영 환경에서는 메타 테이블은 안만드는걸로 방향을 바꿨다.
결국 Spring Batch를 쓰는 의미가 크게 없어지긴 하지만, 뭐 나중에 쓸 일이 있을 수도 있고 디자인 패턴과 라이브러리가 맘에 들어서 메타 테이블 없이 쓸 수 있는 방법을 찾아보았다.
메타 테이블을 비 활성화 하려면
1. JobRepository의 DataSource 비우기
DefaultBatchConfigurer를 상속받는 클래스를 생성하고 setDataSource 메소드 내용을 비우도록 오버라이딩 하자.
→ 로그를 자세히 살펴보니 아래와 같이 설명되어있었다.
...main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 9ms. Found 0 JDBC repository interfaces.
...main] o.s.b.c.c.a.DefaultBatchConfigurer : No datasource was provided...using a Map based JobRepository
...main] o.s.b.c.c.a.DefaultBatchConfigurer : No transaction manager was provided, using a ResourcelessTransactionManager
a. 데이터 소스가 없어서 Map(In memory) 기반의 JobRepository가 생성되었고
b. TransactionManager도 없어서 ResourcelessTransactionManager가 사용되었다.
원리를 알았으니 이를 구체적으로 명시하는게 좋을 것 같아서 createJobRepository 메소드를 오버라이딩 했다.
@Configuration
@RequiredArgsConstructor
public class BatchConfiguration extends DefaultBatchConfigurer {
...
@Override
protected JobRepository createJobRepository() throws Exception {
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean();
factory.setTransactionManager(new ResourcelessTransactionManager());
factory.afterPropertiesSet();
return factory.getObject();
}
}
참고로 MapJobRepositoryFactoryBean에는 아래와 같은 메시지가 적혀있는데, 꽤 중요해 보인다.
A FactoryBean that automates the creation of a SimpleJobRepository using non-persistent in-memory DAOimplementations. This repository is only really intended for use in testingand rapid prototyping. In such settings you might find that ResourcelessTransactionManager is useful (as long as your businesslogic does not use a relational database). Not suited for use inmulti-threaded jobs with splits, although it should be safe to use in amulti-threaded step.
요약하면 이 Repository는 테스트나 프로토 타이핑을 위해 만들어졌고, 멀티 스레딩 분할 Job에는 부적합하다는 뜻이다.
뒷부분이 정확히 이해는 안되지만 대충 동기화가 어렵다는 뜻 같다.
2. 메타 테이블 자동생성 비 활성화
application.properties에 아래 옵션을 추가 해 주자
spring.batch.initialize-schema=never
주말에 마저 정리해야지...
참고: https://m.blog.naver.com/willygwu2003/130171511927
'Backend' 카테고리의 다른 글
Springboot (2) 단위 테스트 (0) | 2020.04.18 |
---|---|
Springboot (1) 개발환경 설정 (0) | 2020.04.17 |
Spring Batch + MyBatis 연결방법 (0) | 2020.03.18 |
사내 인트라넷 메이븐 연결하기 (0) | 2020.03.16 |
Spring Batch 시작하기 (0) | 2020.03.15 |