• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

apiJob부터 가져오는 정보가 null로 나오면서 찾을 수 없습니다.

22.01.28 01:29 작성 조회수 256

0

fileJobConfiguration에서는 정상적으로 데이터가 product에 적재됩니다.

하지만 다음 apiJob을 통해 실행시키면

(--job.name=apiJob requestDate=20220121)

 

ApiStepConfiguration에서 itemReader 실행과정중에

AbstractStep에서 catch구문으로 접근하면서

아래와 같이 발생합니다.

api연동하기전에 먼저 발생한거여서 다음 강의를 쫓아갈수가 없네요 ㅠㅠ

 

진행상황 :

ProductVO[] productList = QueryGenerator.getProductList(dataSource);

를 통해 type 사이즈 3개는 정상적으로 가져옴.

itemReader에서 id, name, price는 모두 null이라서 그런건지...

강의에서는 저부분은 무시했던거 같아서요.

 

 

답변 2

·

답변을 작성해보세요.

1

오류 메시지를 보면 널포인터 예외가 발생했는데 

@Bean
public ItemWriter itemWriter() {
ClassifierCompositeItemWriter<ApiRequestVO> writer
= new ClassifierCompositeItemWriter<>();

WriterClassifier<ApiRequestVO, ItemWriter<? super ApiRequestVO>> classifier
= new WriterClassifier();

// 인자로 만들어서 전달
Map<String, ItemWriter<ApiRequestVO>> writerMap = new HashMap<>();
writerMap.put("1", new ApiItemWriter1(apiService1));
writerMap.put("2", new ApiItemWriter2(apiService2));
writerMap.put("3", new ApiItemWriter3(apiService3));

classifier.setWriterMapMap(writerMap);

writer.setClassifier(classifier);

return writer;
}

위의 코드에서 WriterClassifier 에 wrtieMap 을 설정하고 있습니다.

classifier.setWriterMapMap(writerMap);

그런데 실제 WriterClassifier 안에 보시면

public class WriterClassifier<C, T> implements Classifier<C, T> {

private Map<String, ItemWriter<ApiRequestVO>> writerMap = new HashMap<>();

@Override
public T classify(C Classifiable) {

return (T)writerMap.get(((ApiRequestVO)Classifiable).getProductVO().getType()); // 1,2,3번 순으로 반환

}

public void setWriterMapMap(Map<String, ItemWriter<ApiRequestVO>> writerMapMap) {
this.writerMap = writerMap;
}
}

위의 코드에서 

this.writerMap = writerMap;

로 되어 있는데 실제 파라미터 인자는 writerMapMap 로 되어 있어서 writeMap 에는 아무런 매핑 데이터가 존재하지 않게 됩니다.

setWriterMapMap(Map<String, ItemWriter<ApiRequestVO>> writerMapMap)

그렇기 때문에 writeMap 에서 ApiItemWriter 객체를 꺼내어 와야 하는데 아예 데이터가 존재하지 않기 때문에 writer 가 null 상태가 되어 NullPointerException 이 발생한 오류입니다.

itemReader에서 id, name, price 가 모두 null 인 것은 정상적인 로직이고 오류와는 상관이 없습니다.

오타로 인한 오류네요^^

 

0

죄송하지만 현재 작성한 소스 코드 공유 가능할까요?

backsl님의 프로필

backsl

질문자

2022.01.29

매번 실습마다 깃에 커밋하고  있습니다. 현재까지 반영된 주소는 아래와 같습니다.

https://github.com/prodo-developer/spring-batch/tree/05b4bf2ee079396de1cde3c4e82230ca1fe3c1ac/src/main/java/com/example/springbatch/project