-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
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이라서 그런건지...
강의에서는 저부분은 무시했던거 같아서요.
답변을 작성해보세요.
1
정수원
지식공유자2022.02.03
네
오류 메시지를 보면 널포인터 예외가 발생했는데
@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
질문자2022.01.29
매번 실습마다 깃에 커밋하고 있습니다. 현재까지 반영된 주소는 아래와 같습니다.
https://github.com/prodo-developer/spring-batch/tree/05b4bf2ee079396de1cde3c4e82230ca1fe3c1ac/src/main/java/com/example/springbatch/project
답변 2