인프런 커뮤니티 질문&답변

연못지님의 프로필 이미지
연못지

작성한 질문수

스프링 배치

fileItemReader(null) 미호출 이슈

해결된 질문

작성

·

359

0

안녕하세요 강사님 강의 항상 잘듣고 있습니다.

애플리케이션(2) 강의를 보며 실습하는데 아래 상황에서 진행이 되지 않아 질문 드립니다.

 

아래 이미지처럼 fileStep1() 메서드는 정상적으로 실행되었지만,

fileItemReader(null) 메서드가 호출되지 않아서 그 후 진행을 못하고 있는 상황입니다.

1.JPG

 

브레이크 포인터로 따라가보니 reader가 제대로 넘어오지 않는 것 같습니다,

2.JPG

상세한 내용은 아래와 같습니다.

 

Method threw 'org.springframework.beans.factory.support.ScopeNotActiveException' exception. Cannot evaluate org.springframework.batch.item.file.FlatFileItemReader$$EnhancerBySpringCGLIB$$83a3aa5e.toString()

 

깃헙에 올려주신 Part11 branch 를 checkout 받아서 실행해보았지만 위와 동일한 증상이 있었습니다.
혹시 원인이 무엇일까?

좋은 강의 만들어주셔서 감사합니다.

답변 2

1

정수원님의 프로필 이미지
정수원
지식공유자

위의 내용은 오류라기 보다는 일반적으로는 ItemReader 타입의 객체가 전달되어야 하지만 ItemReader 의 프록시 객체가 전달되어서 타입에 대한 평가를 할 수 없다는 메시지를 출력하고 있는 것입니다.

그리고 프록시 객체가 생성되도록 한 전체 설정에는 문제가 없습니다.

image위에 보시면 targetSource 의 targetClass 에 ItemReader 가 들어가 있는 것을 볼 수 있습니다.

혹시 실행 자체가 안되고 있는 건가요?

제가 실행 소스를 받아 실행해 보면 정상적으로 동작하고 있습니다.

연못지님의 프로필 이미지
연못지
질문자

빠른 답변 감사드립니다.
product table에 내용이 insert 되지 않고, fileItemReader 에서 break point가 걸리지 않아서 insert되지 않은 이유가 fileItemReader를 타지 않아서 라고 생각하여 질문드렸습니다.

우선 실행 자체는 잘되고 있고, project 삭제 후 다시 clone 받아서,
fileItemReader에 sysout으로 로그를 남겨보니 정상적으로 타는 것도 확인하였습니다.

@Bean
public ItemProcessor<ProductVO, Product> fileItemProcessor() {
    System.out.println("jobBuilderFactory = " + jobBuilderFactory);
    return new FileItemProcessor();
}

 

public class FileItemProcessor implements ItemProcessor<ProductVO, Product> {

    @Override
    public Product process(ProductVO item) throws Exception {

        System.out.println("item.toString() = " + item.toString());
        ModelMapper modelMapper = new ModelMapper();
        Product product = modelMapper.map(item, Product.class);


        return product;
    }
}

이렇게 남기고 확인해보니 fileItemProcessor() 까지는 로그가 남았는데
process 메서드 안에서는 로그가 남지 않았습니다.

혹시 제가 놓치고 있는 것이 있을까요?
프로젝트의 자바 설정은 11로 설정해놓았고, pom.xml은 따로 건드린 것 없습니다.

감사합니다.

연못지님의 프로필 이미지
연못지
질문자

강사님 죄송합니다.

 

application.yml을 따로 작성하기 귀찮아서 복사 붙여넣기를 했더니,
batch.job.enabled 설정이 false로 되어 있었네요
잡 실행이 안되서 bean 생성 시에만 브레이크포인트가 잡혀서 그런거였던 것 같습니다.
레포에서 clone 받은 프로젝트말고 제가 따로 작성한 프로젝트에서도 잘 동작합니다.

고생시켜드려 죄송합니다
다른분들도 확인 하실 수 있도록 남겨놓겠습니다

spring:
  config:
    activate:
      on-profile: mysql
  datasource:
    hikari:
      jdbc-url: jdbc:mysql://localhost:3306/springbatch?useUnicode=true&characterEncoding=utf8
      username: root
      password: pass
      driver-class-name: com.mysql.jdbc.Driver
  batch:
    job:
      names: ${job.name:NONE}
      enabled: false // 확인 필요
    jdbc:
      initialize-schema: always

0

안녕하세요, 인프런 AI 인턴입니다.

연못지님, 문제 상황을 잘 정리해주셔서 감사합니다. ScopeNotActiveException 예외는 특정 스코프의 빈이 활성화되지 않은 상태에서 접근하려고 할 때 발생합니다. Spring Batch에서 각각의 step을 실행할 때 스코프에 따른 빈의 생성과 사용이 중요한데, StepScopeJobScope 등이 정상적으로 활성화되지 않았을 때 이런 문제가 발생할 수 있습니다.

해당 문제와 비슷한 상황이나 해결 방법에 대한 기존 질문이 아래에 있습니다. 다음 링크를 참고해보시면 도움이 될 거라 생각합니다.

하지만 자세한 상황을 제가 직접 보지 못해서 위 링크가 정확한 해결책을 제공하는지 확실하지 않습니다. ScopeNotActiveException이 직접 다뤄진 링크가 없기 때문에, 범위(Scope) 이슈에 관련된 질문이 해결책을 제공할 가능성이 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

연못지님의 프로필 이미지
연못지

작성한 질문수

질문하기