728x90
스프링 배치를 사용하는 이유는 아래와 같다.
- 풍부한 기능 : 로깅/ 추적 , 트랜잭션이나 롤백같은 개념 등 필수적인 기능을 제공한다
- 일관성된 코드
- 기존 서비스가 스프링 프레임워크로 되어있을 경우 호환 가능
JobRepository : 배치 처리 정보를 담고있는 저장소
JobLauncher : Job을 실행시켜주는 역할
Job : 배치처리 과정을 하나의 단위로 만들어 놓은 것 ex) 이메일 발송 등
Step : Job의 배치처리를 정의하고 순차적인 단계를 캡슐화한다 ex ) 이메일 발송의 세부적인 작업
ItemReader : Step 에서 Item을 읽어오는 인터페이스
ItemProcessor : Reader 에서 읽어온 Item 데이터를 처리하는 역할
ItemWriter : 처리된 Data 를 Writer 할때 사용
Batch 의 설정부터 가장 기초적인 Hello World 를 출력해보는 프로젝트를 만들어보자.
application.yml 의 파일
spring.batch.job.names 은 구성 편집에서 추가해줄 예정이다. 파라미터로 받는다.
spring:
batch:
job:
names: ${job.name:NONE} # job 을 실행할 때 파라미터로 넘기기 위함
jdbc:
initialize-schema: always # 스키마가 항상 생성
datasource:
url: jdbc:mysql://127.0.0.1:3306/spring_batch
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 1234
jpa:
show-sql: true
application 설정
@EnalbeBatchProcessing 을 추가해준다.
@EnableBatchProcessing // 배치 구동
@SpringBootApplication
public class SpringBatchApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchApplication.class, args);
}
}
Config 파일
디버깅으로 실행하면 Job -> Step -> Tasklet 순서대로 실행된다.
@Configuration
@RequiredArgsConstructor
public class HelloWorldJobConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job helloWorldJob() {
return jobBuilderFactory.get("helloWorldJob")
.incrementer(new RunIdIncrementer())
.start(helloWorldStep())
.build();
}
@JobScope
@Bean
public Step helloWorldStep() {
return stepBuilderFactory.get("helloWorldStep")
// 간단한 경우에는 tasklet 을 사용
.tasklet(helloWorldTasklet())
.build();
}
@StepScope
@Bean
public Tasklet helloWorldTasklet() {
return new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("Hello World Spring Batch");
return RepeatStatus.FINISHED;
}
};
}
}
환경변수 설정
실행 해보기 전에 mysql 에 spring_batch 라는 db 가 없으므로 따로 생성해주어야 한다.
이후 실행하면 아래와 같다.
728x90
'Spring > Batch' 카테고리의 다른 글
Chunk Size and Parallel Spring Batch (0) | 2024.04.22 |
---|---|
Spring Batch 5.x DB 사용하기 (1) | 2024.04.20 |
Spring Batch 5.x 기본 연습 - tasklet (0) | 2024.04.19 |
댓글