Back-End/에러와의 전쟁

[Error] - 배치 서버를 시작할 때 리스너와 관련된 오류

얄루몬 2023. 7. 30. 17:53

[문제 원인]

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을 진행하며 받은 데이터 타입을 의미합니다.