
@Configuration 선언
• 하나의 배치 Job 을 정의하고 빈 설정
JobBuilderFactory
• Job 을 생성하는 빌더 팩토리
StepBuilderFactory
• Step 을 생성하는 빌더 팩토리
Job
• helloJob 이름으로 Job 생성
Step
• helloStep 이름으로 Step 생성
tasklet
• Step 안에서 단일 태스크로 수행되는 로직 구현
Job 구동 -> Step 을 실행 -> Taskelt 을 실행

package com.example.batch1.batch.job.api;
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.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Qualifier("helloJobApi")
@Bean
public Job helloJob() {
return jobBuilderFactory.get("helloJob")
.start(helloStep1())
.next(helloStep2())
.build();
}
public Step helloStep1() {
return stepBuilderFactory.get("helloStep1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
System.out.println("===============");
System.out.println("Hello Batch!!");
System.out.println("===============");
return RepeatStatus.FINISHED;
}
}).build();
}
public Step helloStep2() {
return stepBuilderFactory.get("helloStep2")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
System.out.println("===============");
System.out.println("Hello Batch2!!");
System.out.println("===============");
return RepeatStatus.FINISHED;
}
}).build();
}
}
- ALWAYS
- 스크립트 항상 실행
- RDBMS 설정이 되어 있을 경우 내장 DB 보다 우선적으로 실행
- EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성됨, 기본값
- NEVER
- 스크립트 항상 실행 안함
- 내장 DB 일경우 스크립트가 생성이 안되기 때문에 오류 발생
- 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장
