[SpringBatch] Step 커스텀 트랜잭션 처리
자사 제품을 SpringBatch을 커스텀 하여 제공하는 방향으로 가고 있는데
기존 자사 모듈 코드들을 SpringBatch에서 사용 할 수 있도록 몇가지 작업들(Mock 처리 및 ThreadLocal로 값 세팅)이 필요했습니다.
그래서 처음에는 간단한 Tasklet을 가지고 테스트 하며 어디에 적용할지 생각했을때
AOP를 적용하는 방법을 생각하다 Tasklet이 Bean 대상이 아닐경우 동작 안하는 케이스가 생길수 있기 때문에
다른 방향을 생각하다 TransactionChunkListener의 존재를 알고 해당 부분으로 선후 작업 처리를 할 수 있도록 했습니다.
(그냥 트랜잭션 앞뒤에 해주면 되겠다고 생각했었습니다.)
최근 ETL에서 다른것들을 테스트 할 일이 있어 테스트하다보니 ItemReader의 open()시에 자사 모듈이 정상적으로 동작하지 않는것을 확인하고 SpringBatch 코드를 열어보게 되었습니다.
결국 open을 호출하는 코드는 org.springframework.batch.core.step.AbstractStep에 :205에서 호출하고 있었고
초기화하는 ChunkListener의 경우 :208에 doExecute 안쪽에서 수행되고있었습니다.
어떻게 처리를 할까 고민을 하다
open을 수행하는 :205 를 보니 :204 beforeStep에서 stepExecutionListener를 호출해주고 있었습니다.
결국에는 stepExecutionListener에서 자사 모듈을 위한 초기화 작업과 폐기 처리들을 하고
TransactionChunkListener는 실제 트랜잭션 처리만 할 수 있도록 변경했습니다.
(open을 트랜잭션 밖에서 하고 있다는게 의외긴 했습니다..)
역시 틈틈히 관련 코드들을 봐야 제대로된 코드를 작성할 수 있을것 같습니다.
'JAVA > SpringBatch' 카테고리의 다른 글
properties 에 따른 @Qualifier(${variable}) 처리 (0) | 2020.05.27 |
---|---|
[SpringBatch] @ConfigurationProperties 이용한 데이터소스 주입 관련 (0) | 2020.04.28 |
SpringBatch에 external Configuration Class 검토-2 (0) | 2020.04.23 |
SpringBatch에 external Configuration Class 검토 (0) | 2020.04.10 |
org.springframework.batch.core.launch.NoSuchJobException: No job configuration with the name [longJob] was registered (0) | 2020.04.02 |