반응형
Spring Batch Dependency 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-batch'
}
Batch 기능 활성화 어노테이션(@EnableBatchProcessing)
@EnableBatchProcessing
@SpringBootApplication
public class SpringBatchApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchApplication.class, args);
}
}
- 메인 클래스에 @EnableBatchProcessing을 붙이는 방법
- 설정 파일을 따로 만들어서 해당 클래스에 @EnableBatchProcessing을 붙여도 물론 가능
Spring Batch Job 코드 작성
@RequiredArgsConstructor
@Slf4j
@Configuration
public class TestJobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job testJob() {
return jobBuilderFactory.get("testJob")
.start(testStep())
.build();
}
@Bean
public Step testStep() {
return stepBuilderFactory.get("testStep")
.tasklet((contribution, chunkContext) -> {
log.info("This is testStep");
return RepeatStatus.FINISHED;
}).build();
}
}
- @Configuration
: Spring Batch의 모든 Job은 빈 설정을 해주어야 한다. - JobBuilderFactory
: Job을 생성하는 BuilderFactory - StepBuilderFactory
: Step을 생성하는 BuilderFactory - tasklet
: Step안에서 단일 Task로 수행되는 로직을 수행한다.
Spring Batch DB Schema 적용
아마 inMemory(H2 DB)를 사용하는 경우가 아니면 SQLSyntaxErrorException 예외가 발생한다.
이는 메타 데이터 테이블이 생성되어 있지 않아 발생하는 문제이다. H2 DB를 사용하는 경우 Spring Boot가 자동으로 생성해주지만 MySQL 같은 DB와 연동할 경우 메타 데이터 테이블이 자동으로 생성되지 않는다.
※메타 테이블 데이터에는 Job, Step, Job Parameter의 정보와 상태를 담고 있다. 이 테이블이 존재해야 Spring Batch가 정상 작동한다.
메타 테이블 스키마 생성
메타 테이블에 대한 DB 스키마는 Spring Batch Library에 있다. 예를 들어 MySQL 환경인 경우 schema-mysql.sql 파일에 있는 파일을 이용하면 된다.
- 방법 1 - 쿼리를 복사하여 수동 생성
- schema-mysql.sql 파일에 있는 스키마를 복사하여 자신의 MySQL에서 실행하여 생성합니다.
- 방법 2 - 프로퍼티에 설정
- 프로퍼티에 spring.batch.jdbc.inialize-schema를 설정해주면 된다.
- 속성
- ALWAYS
: DB 스키마 생성 스크립트는 항상 실행되고 RDBMS 설정이 되어 있을 경우 내장 DB보다 우선 실행한다. - EMBEDDED (DEFAULT)
: 내장 DB일 때만 실행되고 스키마가 자동 생성 된다. - NEVER
: DB 스키마 생성 스크립트를 항상 실행하지 않는다. 내장 DB일 경우 스크립트가 생성이 되지 않아 오류가 발생한다.
- ALWAYS
- 수동으로 DB 스키마 스크립트를 생성한 후 설정하는 것을 권장한다.
반응형
'Spring Batch' 카테고리의 다른 글
Spring Batch 문법 (0) | 2023.01.26 |
---|---|
Spring Batch 메타 테이블 데이터 (0) | 2023.01.26 |
Spring Batch 개념 (0) | 2023.01.25 |