[문제 원인]
The method [onWriteError] on target class [ModifyInactiveMemberListener] is incompatible with the signature [(Exception, Chunk)] expected for the annotation [OnWriteError].
- 배치 서버를 작업하던 도중 step에 등록한 리스너가 문제를 일으켰다.
- 이 에러 메시지는 ModifyInactiveMemberListener 클래스에 @OnWriteError 어노테이션이 붙은 onWriteError 메소드가 존재하지만, 해당 메소드의 시그니처가 @OnWriteError 어노테이션에서 기대하는 시그니처와 일치하지 않음을 나타냅니다.
- 해당 예외와 메소드 인자를 맞춰야 한다.
[문제 해결]
딱히 구글링을 해도 답이 나오지 않아 챗지피티에게 해결방안을 물어봤다
void methodName(Exception exception, List<? extends T> items)
여기서:
methodName은 메소드의 이름입니다(이 경우에는 onWriteError).Exception exception은 쓰기 과정 중 발생한 예외를 나타냅니다.List<? extends T> items은 예외가 발생했을 때 쓰기를 시도하던 아이템들의 목록을 나타냅니다. T는 쓰여지는 아이템의 타입을 나타냅니다.
라는 답을 얻었다
[해결 전 코드]
package com.yaloostore.batch.member.listener;
import com.yaloostore.batch.member.dto.MemberIdResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.annotation.OnReadError;
import org.springframework.batch.core.annotation.OnWriteError;
import org.springframework.batch.item.Chunk;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 휴먼회원과 관련된 chunk(itemReader, itemWriter)에서 발생한 에러 메시지를 로그로 작성하는 리스너 입니다.
* */
@Component
@Slf4j
public class ModifyInactiveMemberListener {
@OnReadError
public void onReadError(Exception e){
log.info("==== modifyInactiveMemberStep | ItemReader error message log {}", e.getMessage());
}
@OnWriteError
public void onWriteError(Exception e){
log.info("==== modifyInactiveMemberStep | ItemWrite error message log {}", e.getMessage());
}
}
[해결 후 코드]
package com.yaloostore.batch.member.listener;
import com.yaloostore.batch.member.dto.MemberIdResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.annotation.OnReadError;
import org.springframework.batch.core.annotation.OnWriteError;
import org.springframework.batch.item.Chunk;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 휴먼회원과 관련된 chunk(itemReader, itemWriter)에서 발생한 에러 메시지를 로그로 작성하는 리스너 입니다.
* */
@Component
@Slf4j
public class ModifyInactiveMemberListener {
@OnReadError
public void onReadError(Exception e){
log.info("==== modifyInactiveMemberStep | ItemReader error message log {}", e.getMessage());
}
@OnWriteError
public void onWriteError(Exception e, Chunk chunk){
log.info("==== modifyInactiveMemberStep | ItemWrite error message log {}", e.getMessage());
}
}
- onWriteError 에서 에러와 해당 ItemWrite을 진행하며 받은 데이터 타입을 의미합니다.