Skip to content

EgovMyBatisBatchItemWriter의 공유 변수(EgovResourceVariable/Job/Step) 주입 기능이 동작하지 않음 #239

Description

@z3rotig4r

현상

EgovMyBatisBatchItemWritersetResourceVariable / 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions