<Spring Batch> Spring Batch DB 스키마 이해하기

라모스·2023년 5월 8일
0

Spring Batch

목록 보기
2/2
post-thumbnail

Spring Batch 시작하기

@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job helloJob() {
        return jobBuilderFactory.get("helloJob")
                .start(helloStep())
                .build();
    }

    @Bean
    public Step helloStep() {
        return stepBuilderFactory.get("helloStep")
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("Hello Spring Batch");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
}
  • JobBuilderFactory: Job을 생성하는 빌더 팩토리
  • StepBuilderFactory: Step을 생성하는 빌더 팩토리
  • Job: 위 예제에선 helloJob 이름으로 Job 생성
  • Step: 위 예제에선 helloStep 이름으로 Step 생성
  • tasklet: Step 안에서 단일 태스크로 수행되는 로직 구현

Job 구동 → Step을 실행 → Tasklet을 실행

Spring Batch 메타 데이터

  • Spring Batch의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters, ...)의 정보들을 저장, 업데이트, 조회할 수 있는 스키마 제공
  • 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생 시 빠른 대처 가능
  • DB와 연동할 경우 필수적으로 메타 테이블이 생성돼야 함
  • DB 유형별로 스키마가 제공된다

스키마 생성 설정

  • 수동 생성: 쿼리 복사 후 직접 실행
  • 자동 생성: spring.batch.jdbc.initialize-schema 설정
    • ALWAYS
      • 스크립트 항상 실행
      • RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행
    • EMBEDDED: 내장 DB일 때만 실행되며 스키마가 자동 생성됨. (default)
    • NEVER
      • 스크립트 항상 실행 안함
      • 내장 DB일 경우 스크립트가 생성이 안되기 때문에 오류 발생
      • 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장

Job 관련 테이블

BATCH_JOB_INSTANCE

  • Job이 실행될 때 JobInstance 정보가 저장되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장
  • 동일한 job_name과 job_key로 중복 저장될 수 없다

BATCH_JOB_EXECUTION

  • Job의 실행정보가 저장되며 Job 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리

BATCH_JOB_EXECUTION_PARAMS

  • Job과 함께 실행되는 JobParameter 정보를 저장

BATCH_JOB_EXECUTION_CONTEXT

  • Job의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 (Json 형식) 해서 저장
  • Step 간 서로 공유 가능함

Step 관련 테이블

BATCH_STEP_EXECUTION

  • Step의 실행 정보가 저장되며 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리

BATCH_STEP_EXECUTION_CONTEXT

  • Step의 실행동안 여러가지 상태 정보, 공유 데이터를 직렬화(Json 형식) 해서 저장
  • Step 별로 저장되며 Step 간 서로 공유할 수 없다.

References

profile
Step by step goes a long way.

0개의 댓글