현상
EgovMyBatisBatchItemWriter에 setResourceVariable / setJobVariable / setStepVariable로 공유 변수를 설정해도, 해당 변수들이 MyBatis statement 파라미터에 반영되지 않습니다. 동일 기능을 제공하는 reader(EgovMyBatisPagingItemReader)는 정상 동작하므로 writer 측만 누락된 상태입니다.
원인
write(Chunk)는 각 item의 속성과 공유 변수를 병합한 Map을 만들어 List에 모으지만, 그 결과를 super.write(chunk)에 전달하지 않고 원본 chunk로 호출합니다. 즉 변수 주입을 위해 만든 파라미터 Map이 전혀 사용되지 않습니다.
- reader:
processVariable()에서 setParameterValues(map)으로 공유 변수를 쿼리 파라미터에 주입 → 동작함
- writer: 파라미터 Map을 만들지만 statement에 전달하는 배선이 없음 → 동작 안 함
사용되지 않는(dead) Map 생성 루프 자체는 PR #238에서 먼저 제거했습니다. 본 이슈는 기능 복구를 추적합니다.
영향
- 표준프레임워크 배치 가이드의 '변수 공유' 기능을 writer에서 기대한 사용자는, 설정은 받지만 실제 동작하지 않는 silent 미동작을 겪습니다.
- reader/writer 간 동작 비대칭으로 혼란.
제안
mybatis-spring의 MyBatisBatchItemWriter#setItemToParameterConverter(Converter<T, ?>)를 활용하여, 각 item을 (item 속성 + 공유 변수)로 병합한 파라미터 객체로 변환해 statement에 전달하는 방식으로 복구할 수 있습니다.
검토 필요사항:
- statement 파라미터 모델이 POJO에서 Map으로 바뀌므로 하위호환 영향(기존 statement가 POJO 프로퍼티 바인딩에 의존) 검토 필요.
- 공유 변수 key와 item 프로퍼티 key 충돌 시 우선순위 정의 필요.
- 변수 주입이 실제 update에 반영되는지 검증하는 통합 테스트 추가.
환경
- 모듈:
Batch/org.egovframe.rte.bat.core
- 클래스:
org.egovframe.rte.bat.core.item.database.EgovMyBatisBatchItemWriter
현상
EgovMyBatisBatchItemWriter에setResourceVariable/setJobVariable/setStepVariable로 공유 변수를 설정해도, 해당 변수들이 MyBatis statement 파라미터에 반영되지 않습니다. 동일 기능을 제공하는 reader(EgovMyBatisPagingItemReader)는 정상 동작하므로 writer 측만 누락된 상태입니다.원인
write(Chunk)는 각 item의 속성과 공유 변수를 병합한Map을 만들어List에 모으지만, 그 결과를super.write(chunk)에 전달하지 않고 원본 chunk로 호출합니다. 즉 변수 주입을 위해 만든 파라미터 Map이 전혀 사용되지 않습니다.processVariable()에서setParameterValues(map)으로 공유 변수를 쿼리 파라미터에 주입 → 동작함영향
제안
mybatis-spring의
MyBatisBatchItemWriter#setItemToParameterConverter(Converter<T, ?>)를 활용하여, 각 item을 (item 속성 + 공유 변수)로 병합한 파라미터 객체로 변환해 statement에 전달하는 방식으로 복구할 수 있습니다.검토 필요사항:
환경
Batch/org.egovframe.rte.bat.coreorg.egovframe.rte.bat.core.item.database.EgovMyBatisBatchItemWriter