inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

어플리케이션 예제 (4)

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

430

backsl

작성한 질문수 2

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이라서 그런건지...

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

 

 

spring-boot spring-batch

답변 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

정수원

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

0

backsl

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

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

스프링 배치 버전 질문

0

139

1

소스코드가 어디에 있나요?

0

122

2

트랜잭션 예외

0

101

1

질문이 있습니다.

0

138

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

144

2

여러 JOB 설정하는법

0

158

2

강의 자료 다른 방법 있을까요?

0

163

1

JobExecution과 JobExecutionContext와의 관계

0

197

2

특정 job만 실행

1

267

1

Batch 성능 질문

0

158

1

ItemReaderAdapter 종료

0

87

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

187

2

Spring Batch 배포 질문

0

253

2

spring batch 버전

0

238

2

retry count 관련 질문

0

183

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

341

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

242

2

Multithread step과 AsyncItemProcessor

0

208

2

job 재실행

0

259

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

191

1

Multi-threaded-step과 Partitioning 차이 확인

0

183

2

jdbcCursorReader, jdbcPagingReader 질문

0

149

1

step muti-thread 질문

0

114

1

itemSteam open update close 질문

0

117

1