본문 바로가기
개발/spring-batch

[spring-batch] Job 구성하기

by RunAndrew 2021. 9. 24.

HelloWorldJob 구성하기

스프링 배치를 통해서 간단한 HelloWorldJob을 구성해 보자.

의존성 추가

  • batch, mysql 의존성을 추가한다.
  • 참고로, mysql외에 local에서 인메모리DB를 통해서 이용하고 HSQLDB를 사용할 수 있다.
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.23</version>
</dependency>

DB connection 설정

application.properties 파일에 mysql datasource connection정보를 설정한다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_batch
spring.datasource.username=root
spring.datasource.password=password

spring.batch.jdbc.initialize-schema=always
  • spring batch는 Job의 상태를 관리해서, Job이 실패했을때 그 지점부터 다시 실행이 가능하도록 되어있다.
  • 그렇기 때문에 Job의 상태와, 파라미터값들에 대한 정보들이 spring batch table에 저장이 된다.
  • spring.batch.jdbc.initialize-schema=always 옵션을 통해서, DB schema에 validation체크를 한다.
    • 초기에 schema 를 생성한다.

@EnableBatchProcessing 추가

@SpringBootApplication
@EnableBatchProcessing //spring batch 인프라스트럭처 구성
public class SpringBatchExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchExampleApplication.class, args);
    }
}
  • @EnableBatchProcession 어노테이션을 추가한다.
    • 해당 어노테이션은 spring batch 모듈 인프라 스트럭쳐를 구성한다.
    • 한가지 예로, JobLauncher를 통해서 Job이 실행되는데, @EnableBatchProcession 어노테이션을 달아주면, JobLauncher인터페이스로 SimpleJobLauncher 구현체로 만들어진다.

간단한 HelloWorldJob 구성해보기

@Component
public class HelloWorldJob {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job job() {
        return this.jobBuilderFactory.get("basicjob")
                .start(step1())
                .build();
    }

    @Bean
    private Step step1() {
        return this.stepBuilderFactory.get("step1")
                .tasklet((stepContribution, chunkContext) -> {
                    System.out.println("hello world");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
  • jobBuilderFactory와 stepBuilderFactory는 빈으로 주입받아서 사용한다.
  • jobBuilderFactory, stepBuilderFacotry 의 get() 메서드를 통해서 Job과 Step의 이름을 정한다.
  • Job과 Step(1:N)의 관계로 구성가능하다.
  • step은 tasklet 기반과 chunck 기반으로 나눌수 있다.
    • 예제에서는 taskelt을 람다식을 통해서 구현했다. .
    • RepeatStatus.FINISHED를 통해서 해당 Step을 종료한다.

'개발 > spring-batch' 카테고리의 다른 글

[spring-batch] 잡 파라미터  (0) 2021.09.24
[spring-batch] Job 소개하기  (0) 2021.09.24
[spring-batch] 스프링 배치 아키텍쳐  (0) 2021.09.24