본문 바로가기

Spring Batch

패스트캠퍼스 챌린지 28일차 - Spring Batch 10

📌 spring-batch 10

 

✔️ Async Step

  • 일반 step은 ItemReader -> ItemProcessor -> ItemWriter 각 하나씩 수행된다.
  • Async step은 ItemReader는 동일하지만 ItemProcessor와 ItemWrtier가 Async로 수행된다.

 

✔️ Async ItemProcessor와 ItemWriter를 위한 의존성 추가

implementation 'org.springframework.batch:spring-batch-integration'

 

✔️ main application에 설정

  • async 후 배치 수행 후 안전한 종료를 위해 아래 코드를 추가한다.
    System.exit(SpringApplication.exit(SpringApplication.run(...)));

 

✔️ TaskExecutor 빈 추가

@Bean
@Primary // 이미 정의된 Bean 대신 정의한 Bean을 사용
TaskExecutor taskExecutor() {
    ThreadPollTaskExecutor te = new ThreadPollTaskExecutor();
    te.setCorePollSize(10); // pool의 기본 쓰레드 사이즈
    te.setMaxPoolSize(20); // 최대 쓰레드 사이즈
    te.setThreadNamePrefix("batch-thread-");
    te.initialize();

    return te;
}

 

✔️ AsyncItemProcessor 구현
tasExecutor는 앞서 정의한 Bean을 주입한다.

private AsyncItemProcessor<User, User> itemProcessor() {
    ItemProcessor<User, User> itemProcessor = user -> {
        if (...) return user;
        return null;
    };

    AsyncItemProcessor<User, User> asyncItemProcessor = new AsyncItemProcessor<>();
    asyncItemProcessor.setDelegate(itemProcessor);
    asyncItemProcessor.setTaskExecutor(this.tasExecutor);
}

 

✔️ AsyncItemWriter 구현

private AsyncItemWriter<User> itemWriter() {
    ItemWriter<User> itemWriter = users -> users.foreach(
            ...
            ...
        )

    AsyncItemWriter<User> asyncItemWriter = new AsyncItemWriter<>();
    asyncItemWriter.setDelegate(itemWriter);

    return asyncItemWriter;
} 

 

✔️ step의 processor 에러

  • output 타입을 Feature로 감싸줘야 한다.
    <User, Feature<User>>chunk(...)
    .reader()
    .processor()
    .writer()

👍 수강인증

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다