티스토리 뷰

spring batch 에서는 batch 메타 테이블을 이용해 배치 잡의 메타 데이터들을 관리해준다.

job 의 실행 이력, 들어온 job parameters, 실행 결과 등을 말이다. 이 메타 테이블에 있는 정보를 이용해 spring batch 는 이전에 실행 이력이 있는 파라미터로 job 요청이 들어오면 job 실행을 중단할 수 있다. 하지만 이런식으로 job 실행을 막는건 여러모로 불편할때가 있다. 그래서 이를 무력화 하기위해 spring batch 는 기본 job parameters 에 유니크한 파라미터를 추가해주는 JobParametersIncrementer 라는 인터페이스를 제공한다. 그리고 이 인터페이스의 구현체인 RunIdIncrementer 클래스를 제공하고있다.

 

https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/RunIdIncrementer.java

 

spring-projects/spring-batch

Spring Batch is a framework for writing offline and batch applications using Spring and Java - spring-projects/spring-batch

github.com

특별히 더 신경써줄것 없이 RunIdIncrementer 만 job 생성할때 넣어주면 job 실행에는 별 이슈가 없다. 하지만 이런저런 테스트를 하는 와중에 이슈를 하나 발견했는데 이전 job 실행에서 A 파라미터를 넣었다가 다음 job 실행에서 A 파라미터를 제외했는데도 불구하고 A 파라미터가 들어가고있는 것이다.

 

첫번째 실행시 [param=A] 를 명시적으로 전달했다.
두번째 실행시 param 파라미터를 추가하지 않았지만 A가 들어가있다.

이 이슈를 맞이한 이유는 테스트 케이스를 작성하면서 명시적으로 job parameters 를 전달하다가, job parameters 가 null 인 경우에도 대응하기위해 null 대응 코드를 추가하고, job parameters 를 null 로 전달했음에도 정상적인(이전 실행) 값이 들어가고있어 알게되었다. 명시적으로 값을 넣지않았음에도 불구하고 이전 실행 내역의 파라미터가 추가되는 이유는 무엇일까?

 

spring batch 의 job 을 실행시키는 주체는 CommandLineJobRunner 인데 이 클래스를 확인해보면 그 이유를 알 수 있다. CommandLineJobRunner 에서 next 옵션쪽을 보면, 해당 옵션을 사용할 경우 이전 파라미터를 조회해서 가져오고 이전 파라미터와 현재 파라미터의 증분 내용을 적용한다고 나와있다. 즉 일단 이전 파라미터를 가져오고 해당 값중에 변경된 값이 있으면 적용하고 없으면 그대로 사용한다는 것이다. 때문에 위에서 발생한 이슈는 spring batch 의 스펙대로 잘 돌고있는 것이다.

 

https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/core/launch/support/CommandLineJobRunner.html

 

CommandLineJobRunner (Spring Batch 4.2.4.RELEASE API)

Basic launcher for starting jobs from the command line. In general, it is assumed that this launcher will primarily be used to start a job via a script from an Enterprise Scheduler. Therefore, exit codes are mapped to integers so that schedulers can use th

docs.spring.io

 

일단 원인을 파악했으니 적당히 잘 우회해서 문제를 해결할 수 있었다. 우회가 아닌 정상적인 파훼법(?)은 내가 아직 batch 쪽 지식이 부족해서.. 좀 더 알아봐야할 것 같다. 일단 원인과 해당 이슈가 사실은 이슈가 아니라 스펙임을 정리해놓는다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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 31
글 보관함