AsyncItemProcessor을 사용하는 방식

이다은·2024년 9월 25일

스프링 배치

목록 보기
5/5

수업 종료 후 사용한 이용권을 차감하려고 함
booking 정보를 읽어서 이용권 차감 처리를 할 때 process 과정에서 별도의 스레드가 할당되어서 작업을 병렬로 처리하는 방식인 AsyncItemProcessor을 사용하려고 함

AsyncItemProcessor

process 로직을 병렬로 처리하는 방식

UserPassesJobConfig 코드

    @Bean
    public Step usePassesStep(){
        return new StepBuilder("usePassesStep",jobRepository)
                .<BookingEntity, Future<BookingEntity>>chunk(CHUNK_SIZE,transactionManager)
                .reader(usePassesItemReader()) //수업이 종료된 이용권을 읽음
                .processor(usePassesAsyncItemProcessor())
                .writer(usePassesAsyncItemWriter())
                .build();

    }

    @Bean
    public AsyncItemProcessor<BookingEntity,BookingEntity> usePassesAsyncItemProcessor(){
        AsyncItemProcessor<BookingEntity,BookingEntity> asyncItemProcessor = new AsyncItemProcessor<>();
        asyncItemProcessor.setDelegate(usePassesItemProcessor()); // booking 엔티티 의 이용권 사용 여부를 true 로 변경하고 이용권 남은 개수를 하나 차감  
        asyncItemProcessor.setTaskExecutor(new SimpleAsyncTaskExecutor()); //스레드 새로 생성 
        return asyncItemProcessor;
    }

    @Bean
    public AsyncItemWriter<BookingEntity> usePassesAsyncItemWriter(){
        AsyncItemWriter<BookingEntity> asyncItemWriter = new AsyncItemWriter<>();
        asyncItemWriter.setDelegate(usePassesItemWriter()); 
        return asyncItemWriter;
    }

0개의 댓글