본문 바로가기
Spring/Batch

스프링 배치 (Spring Batch)로 Hello World 를 출력

by YoonJong 2023. 1. 12.
728x90

스프링 배치를 사용하는 이유는 아래와 같다.

 

- 풍부한 기능 : 로깅/ 추적 , 트랜잭션이나 롤백같은 개념 등 필수적인 기능을 제공한다

- 일관성된 코드 

- 기존 서비스가 스프링 프레임워크로 되어있을 경우 호환 가능

 

예제로-배우는-핵심-스프링-배치

JobRepository : 배치 처리 정보를 담고있는 저장소

JobLauncher : Job을 실행시켜주는 역할

Job :  배치처리 과정을 하나의 단위로 만들어 놓은 것 ex) 이메일 발송 등

Step : Job의 배치처리를 정의하고 순차적인 단계를 캡슐화한다 ex ) 이메일 발송의 세부적인 작업

 

ItemReader : Step 에서 Item을 읽어오는 인터페이스

ItemProcessor : Reader 에서 읽어온 Item 데이터를 처리하는 역할

ItemWriter :  처리된 Data 를 Writer 할때 사용


Batch 의 설정부터 가장 기초적인 Hello World 를 출력해보는 프로젝트를 만들어보자.

 

application.yml 의 파일

spring.batch.job.names 은 구성 편집에서 추가해줄 예정이다. 파라미터로 받는다.

spring:
  batch:
    job:
      names: ${job.name:NONE} # job 을 실행할 때 파라미터로 넘기기 위함
    jdbc:
      initialize-schema: always # 스키마가 항상 생성
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/spring_batch
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 1234

  jpa:
    show-sql: true

 

application 설정

@EnalbeBatchProcessing 을 추가해준다.

@EnableBatchProcessing // 배치 구동
@SpringBootApplication
public class SpringBatchApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchApplication.class, args);
    }
}

 

Config 파일 

디버깅으로 실행하면 Job -> Step -> Tasklet 순서대로 실행된다.

@Configuration
@RequiredArgsConstructor
public class HelloWorldJobConfig {

    private final JobBuilderFactory jobBuilderFactory;

    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job helloWorldJob() {
        return jobBuilderFactory.get("helloWorldJob")
                .incrementer(new RunIdIncrementer())
                .start(helloWorldStep())
                .build();
    }

    @JobScope
    @Bean
    public Step helloWorldStep() {
        return stepBuilderFactory.get("helloWorldStep")
                // 간단한 경우에는 tasklet 을 사용
                .tasklet(helloWorldTasklet())
                .build();
    }

    @StepScope
    @Bean
    public Tasklet helloWorldTasklet() {
        return new Tasklet() {
            @Override
            public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
                System.out.println("Hello World Spring Batch");
                return RepeatStatus.FINISHED;
            }
        };
    }

}

 

환경변수 설정

 

실행 해보기 전에 mysql 에 spring_batch 라는 db 가 없으므로 따로 생성해주어야 한다.

이후 실행하면 아래와 같다.

728x90

'Spring > Batch' 카테고리의 다른 글

Chunk Size and Parallel Spring Batch  (0) 2024.04.22
Spring Batch 5.x DB 사용하기  (1) 2024.04.20
Spring Batch 5.x 기본 연습 - tasklet  (0) 2024.04.19

댓글