Skip to content

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

@z3rotig4r

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions