[개발] 프로그램 지식

[spring batch] asynchronousFlatFileItemReader 란? 개념 및 사용법

  • -
반응형

AsynchronousFlatFileItemReader: 개념과 사용법

1. AsynchronousFlatFileItemReader란?

AsynchronousFlatFileItemReader는 Spring Batch에서 제공하는 비동기 데이터 읽기 구성 요소로, 대량의 데이터를 처리할 때 성능을 최적화하는 데 사용됩니다. 이 리더는 일반적인 FlatFileItemReader와 유사하지만, 비동기 작업을 지원하여 데이터를 효율적으로 읽습니다.

 

 

 

 

 

2. 주요 특징

  • 비동기 읽기: 파일에서 데이터를 읽는 작업을 별도의 스레드에서 실행하여 병렬 처리가 가능합니다.
  • 성능 향상: 대규모 파일을 처리할 때 읽기 작업과 후속 작업 간 병목 현상을 줄입니다.
  • Spring Batch 통합: 기존 FlatFileItemReader와 쉽게 통합 가능.

 

 

 

 

 

 

3. AsynchronousFlatFileItemReader의 주요 구성

다음은 AsynchronousFlatFileItemReader의 핵심 구성 요소입니다:

  • delegate: 실제 데이터를 읽는 기본 리더(예: FlatFileItemReader).
  • executor: 비동기 작업을 처리하는 TaskExecutor.

 

 

 

 

 

 

4. AsynchronousFlatFileItemReader 예제

아래는 AsynchronousFlatFileItemReader를 설정하고 사용하는 예제입니다:

1) 기본 설정


import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.support.builder.AsyncItemReaderBuilder;
import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.task.SimpleAsyncTaskExecutor;

@Configuration
public class BatchConfiguration {

    @Bean
    @StepScope
    public FlatFileItemReader flatFileItemReader() {
        return new FlatFileItemReaderBuilder()
                .name("flatFileItemReader")
                .resource(new ClassPathResource("data.csv"))
                .delimited()
                .names("field1", "field2")
                .targetType(String.class)
                .build();
    }

    @Bean
    public AsynchronousFlatFileItemReader asynchronousFlatFileItemReader() {
        return new AsyncItemReaderBuilder()
                .delegate(flatFileItemReader())
                .taskExecutor(new SimpleAsyncTaskExecutor())
                .build();
    }
}

 

 

 

 

 

 

 

2) 스텝과 작업 흐름 정의


import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class StepConfiguration {

    @Bean
    public Step asyncFileProcessingStep(
            StepBuilderFactory stepBuilderFactory,
            AsynchronousFlatFileItemReader asyncReader,
            ItemProcessor<String, String> processor,
            ItemWriter writer) {
        return stepBuilderFactory.get("asyncFileProcessingStep")
                .<String, String>chunk(10)
                .reader(asyncReader)
                .processor(processor)
                .writer(writer)
                .build();
    }
}

 

 

 

 

 

 

 

 

5. 사용 시 유의사항

  • 데이터 순서 보장: 비동기로 처리되므로 순서가 중요한 경우 추가적인 조치가 필요합니다.
  • Thread Safety: ItemProcessorItemWriter는 스레드 안전해야 합니다.
  • TaskExecutor 설정: 적절한 TaskExecutor를 설정하여 성능을 최적화하세요.

 

 

 

 

 

 

6. 결론

AsynchronousFlatFileItemReader는 대량의 데이터를 효율적으로 처리하는 데 매우 유용합니다. 비동기 처리를 통해 성능을 향상시키고, 대규모 파일 작업에서 병목 현상을 줄일 수 있습니다. 하지만 데이터 순서와 스레드 안전성을 고려하여 신중하게 설정하는 것이 중요합니다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.