본문 바로가기
IT/Java

Spring Batch (part 3. 프로젝트 적용 - Chunk 방식)

by 성준하이 2024. 5. 20.
반응형

이전에 포스팅에서 배치에 대해서 소개 및 용어 정리를 했었다.

자세한 내용은 참고 포스팅 참고 바란다.

 

이번 포스팅에서는 Java 프로젝트 위에 올려볼 예정이다.

 

먼저 사용을 위해서는 Maven 등록을 해준다.

..이상 생략
<dependency>
     <groupId>org.springframework.batch</groupId>
     <artifactId>spring-batch-test</artifactId>
     <scope>test</scope>
</dependency>
..이하 생략

 

그리고 main 메서드 위에 배치 사용을 위한 annotation을 달아준다.

@EnableBatchProcessing
@SpringBootApplication
public class TestBatchApplication {
     public static void main(String[] args) {
          SpringApplication.run(TestBatchApplication.class, args);
     }
}


그리고 Job과 Step 을 위한 패키지를 구분하였다.

 

-Job

-Step

---Chunk
 ---Tasklet

이렇게 트리구조 이다.

 

Chunk 방식에 대한 예제는 아래와 같다.

 

Chunk


JobConfig

@Slf4j
@Configuration
@RequiredArgsConstructor
public class TestJobConfig {

private final JobRepository jobRepository;
private final TestStepConfig testStepConfig;

    @Bean
    public Job testChunkJob(){
        return new JobBuilder("testChunkJob", jobRepository)
                .start(testStepConfig.testChunkStep())
                .build();
    }

}

 

StepConfig

@Configuration
@RequiredArgsConstructor
public class TestStepConfig {

    private final PlatformTransactionManager platformTransactionManager;
    private final JobRepository jobRepository;

    @Value(value="1000")
    private Integer chunkSize;

    private final TestItemReader reader;
    private final TestItemProcessor processor;
    private final TestItemWriter writer;

    @Bean
    public Step testChunkStep() {
        return new StepBuilder("testChunkStep", jobRepository)
            .<TestTableDto,TestTableDto>chunk(chunkSize,platformTransactionManager)
            .reader(reader.reader())
            .processor(processor)
            .writer(writer.writer())
        .build();
    }
}

 

그리고 각각의 Reader, Processor, Writer 는 아래와 같다.

Reader @RequiredArgsConstructor
@Component
public class TestItemReader extends BatchDbItemReader<TestTableDto>{

private String mthdNm;

    private Integer chunkSize = 10;
    private Map<String, Sort.Direction> sort;
    private final DataSource dataSource;
    private String sql = TestSql.TEST_SQL_DTO_JDBC;
    private RowMapper<TestTableDto> rowMapper = new BeanPropertyRowMapper<>(TestTableDto.class);
    private Integer fetchSize;
    private Integer pageSize;
    private PagingQueryProvider provider;
    private Map<String, Object> params;
    /**
     * @return JdbcCursorItemReader<? extends TmpAgreecallr00Entt>
     */

    public JdbcCursorItemReader<? extends TestTableDto> reader() {
        System.out.println("reader");
        return super.reader(dataSource, sql, rowMapper);

    }
}
Processor @RequiredArgsConstructor
@Component
@StepScope
public class TestItemProcessor implements ItemProcessor<TestTableDto, TestTableDto>{


    @Override
    public TestTableDto process(TestTableDto item) throws Exception {
        System.out.println("processor");
    
        if (true){
            item.setFctrN1("100");
        }else {
            item.setFctrN1("200");
        }
        return item;
    }
}
Writer @RequiredArgsConstructor
@Configuration
public class TestItemWriter extends BatchDbItemWriter<TestTableDto> {

    private final DataSource dataSource;

    private String sql = TestSql.TEST_SQL_DTO_JDBC_INSERT;

    @Bean(name="testItemWriterBean")
    public JdbcBatchItemWriter<? super TestTableDto> writer(){
        System.out.println("writer");
        return super.writer(dataSource,sql);
    }
}

비고 >

Reader - 빨간 텍스트에 읽을 데이터의 쿼리를 넣어준다.

Processor - 빨간 텍스트 부분에 Writer 를 하기 위한 DTO set을 정의 및 변경 해준다.

Writer - 빨간 텍스트에 최종 DTO 로 할 작업의 쿼리를 적어준다.


참고 포스팅

https://thenicesj.tistory.com/308

 

Spring Batch (part 1. 소개)

스프링에는 다양한 기능들이 있고 우리가 실제로 사용하는것은 프로젝트에 맞게 다양하다.지금까지 다뤄온 글들과는 다른 기능을 하나 소개 해보려고 한다. 먼저 이름을 소개하면 스프링 배치

thenicesj.tistory.com

https://thenicesj.tistory.com/937

 

Spring Batch (part 1. 소개)

우선 Spring Batch에 대해서 특징 및 설명을 소개하면 아래와 같다. Spring Batch는 트랜잭션 관리, 작업 처리 통계, 로깅/추적, 작업 재시작/건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인

thenicesj.tistory.com

 

반응형

댓글