Programming/Spring Batch
[Spring Batch] 스프링 배치로 Hello, World 실행하기 예제 (tasklet 사용)
junngo
2022. 3. 29. 09:47
반응형
Job과 Step의 세부적인 내용을 살펴 보기 전에 스프링 배치를 활용하여 Hello, World 부터 출력을 하겠습니다. 개념도 중요하겠지만 스프링 배치는 코드로 먼저 보는 것이 조금 더 직관적이겠습니다.
1. 프로젝트 세팅
start.spring.io 사이트트에서 프로젝트 기본 골격을 생성하였습니다.
2. 데이터베이스 생성을 위한 docker-compose.yml 파일 생성
version: '3'
services:
mysql:
container_name: mysql_batch
image: mysql/mysql-server:5.7
environment:
MYSQL_ROOT_HOST: '%'
MYSQL_USER: "test"
MYSQL_PASSWORD: "test"
MYSQL_DATABASE: "test"
ports:
- "3306:3306"
command:
- "mysqld"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
mysql 구동을 위해서 yml 파일을 만들어주세요.
3. 설정 요소를 위한 application.yml파일 생성 및 작성
spring:
profiles:
active: local
batch:
job:
names: ${job.name:NONE}
---
spring:
config:
activate:
on-profile: local
datasource:
url: jdbc:mysql://127.0.0.1:3306/test
driver-class-name: com.mysql.cj.jdbc.Driver
username: test
password: test
jpa:
show-sql: true
generate-ddl: false
hibernate:
ddl-auto: none
batch:
jdbc:
initialize-schema: ALWAYS
---
spring:
config:
activate:
on-profile: test
jpa:
database: h2
데이터베이스 생성 및 배치 구동시 파라미터 전달을 위한 application.yml파일을 작성하였습니다.
4. 도커 명령어를 통해서 데이터베이스 구동
docker-compose up -d
5. main 함수에 배치 수행을 위한 어노테이션 추가
EnableBatchProcessing 어노테이션을 추가해주세요. 이후에 구동을 하고 데이터베이스 테이블을 보게 되면 배치 관련 테이블이 자동으로 생성된 모습을 보실 수 있습니다.
6. job 패키지 생성 및 HelloJobConfig 파일 생성
@Configuration
@RequiredArgsConstructor
public class HelloJobConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job helloJob(Step helloStep) {
return jobBuilderFactory.get("helloJob")
.incrementer(new RunIdIncrementer())
.start(helloStep)
.build();
}
@JobScope
@Bean
public Step helloStep(Tasklet tasklet) {
return stepBuilderFactory.get("helloStep")
.tasklet(tasklet)
.build();
}
@StepScope
@Bean
public Tasklet tasklet() {
return (contribution, chunkContext) -> {
System.out.println("Hello Spring batch");
return RepeatStatus.FINISHED;
};
}
}
helloJob이라는 하나의 잡을 생성하고, step을 하나 만들었습니다. step을 구동하기 위해서는 이번 코드에서는 tasklet을 사용하였는데요.
step을 구성하는 방법은 2가지 있습니다. 하나는 tasklet 방식과 다른 방식은 앞전의 설명을 드린 itemReader / itemProcessor / itemWriter 방식으로 처리하는 방식이 있습니다.
간단한 배치 작업은 tasklet 방식을 사용하고 두번째 방법은 차차 살펴 보도록 하겠습니다.
7. 수행 시 아래의 파라미터를 넘겨주세요.
--spring.batch.job.names=helloJob
반응형