Spring Batch

Spring Batch의 기본 구조와 DB 연결

NEWDODORIPYO 2022. 8. 17. 17:45

👉설정

Maven & yml 기준

다중 연결한 DB = h2 , mariadb

------------------------------------------------------------------------------------------------------------------------------------------------

Batch의 기본 구조를 만들어보기 전에 DB를 먼저 연결해주었다. 

이왕 연결해주는거 yml에 다중 DB 연결을 연습해보려 2개를 연결했습니다. 

h2 Maven 설정

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

mariadb Maven 설정

<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>3.0.7</version>
</dependency>

yml에 다중 DB 설정하기

spring:
  profiles:
    active: local


---

spring:
  config:
    activate:
      on-profile: local
  datasource:
    hikari:
      jdbc-url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
      username: sa
      password:
      driver-class-name: org.h2.Driver

---




spring:
  config:
    activate:
      on-profile: mariadb
  datasource:
    url: jdbc:mariadb://localhost:3306/batch
    username: batch
    password: batch
    driver-class-name: org.mariadb.jdbc.Driver
  batch:
    jdbc:
      initialize-schema:always
  • h2 DB 와 mariadb를 설정해 주었다.
  • initialize-schema:always 설정해주면서 배치를 실행하면 자동으로 테이블이 생성되게 했다.
  • yml 은 용어의 줄이 다르거나 위치가 한 칸이라도 다르면 실행이 안된다.... <짜증....😒>
  • DB의 실행은 어떤 방식으로 설정해서 하는가는??
    • Active profiles에 설정한 이름을 지정해주면 된다.
     

😎이제 본격적으로 기본적인 Spring Batch 의 코드를 만들어 보자 

 

현재 패키지 구조

BatchApplication

package io.batch;

import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableBatchProcessing
@SpringBootApplication
public class BatchApplication {

    public static void main(String[] args) {

        SpringApplication.run(BatchApplication.class, args);
    }

}
  • @EnableBatchProcessing 설정을 해준다.
    • 스프링 배치가 작동하기 위해 선언해야 하는 어노테이션

DBJobConfiguration<batch>

package io.batch;

import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@RequiredArgsConstructor
public class DBJobConfiguration {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;


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

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
        .tasklet(new Tasklet() {
            @Override
            public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                return RepeatStatus.FINISHED;
            }
        })
                .build();
    }

    @Bean
    public Step step2() {
        return stepBuilderFactory.get("step2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        return RepeatStatus.FINISHED;
                    }
                })
                .build();
    }
}
  • 기본적인 batch 코드 설정

이제 프로젝트를 실행시켜보면 자동으로 스키마 테이블이 생성되어야 한다.

테이블 생성 완료

initialize-schema:always 설정해 주었기 때문에 프로젝트를 실행시키면 자동으로 테이블이 생성된다.

짠⭐ Spring Batch의 기본적인 코드를 만들어보았습니다 

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

Spring Batch 도메인 Job  (0) 2022.08.19
Spring Batch 테이블 의미  (0) 2022.08.18
Spring Batch 스키마 생성  (0) 2022.08.17
Spring Batch 기본 구조  (0) 2022.08.13
Spring Batch 입문!!  (0) 2022.08.01