728x90
SpringInitializer

- lombok
- spring configuration processor
- jdbc api
- spring data jpa
- mysql driver
- spring batch
docker-compose.yml
version: '3'
services:
mysql:
container_name: spring_batch
image: mysql:5.7
platform: linux/amd64
environment:
MYSQL_DATABASE: "spring_batch"
MYSQL_ROOT_PASSWORD: "password1234"
TZ: "Asia/Seoul"
ports:
- "3307:3307"
command:
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
services:
mysql:
container_name: spring_batch
image: mysql:5.7
platform: linux/amd64
environment:
MYSQL_DATABASE: "spring_batch"
MYSQL_ROOT_PASSWORD: "password1234"
TZ: "Asia/Seoul"
ports:
- "3307:3307"
command:
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
- docker가 깔려 있다는 전제 하에 진행한다.
- 해당 프로젝트 하위에 docker-compose.yml 파일 생성 후 위와 같이 작성한다.
- mac m1칩 같은 경우 platform: linux/amd64를 추가해 주어야 한다.
- 해당 프로젝트에 터미널을 열어 "docker-compose up" 명령어 실행
- 만약 잘못 실행이 된다면 "docker ps -a" 명령어를 통해 container 상태 확인 후, "docker rm ["컨테이너 id"]"로 제거 후 실행하여 보자
application.yml
spring:
batch:
job:
name: ${job.name:NONE}
jdbc:
initialize-schema: always # 스키마생성
datasource:
url: jdbc:mysql://127.0.0.1:3307/spring_batch
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: password1234
jpa:
show-sql: true
batch:
job:
name: ${job.name:NONE}
jdbc:
initialize-schema: always # 스키마생성
datasource:
url: jdbc:mysql://127.0.0.1:3307/spring_batch
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: password1234
jpa:
show-sql: true
SpringBatchTutorialApplication
@SpringBootApplication
@EnableBatchProcessing
public class SpringBatchTutorialApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchTutorialApplication.class, args);
}
}
- EnableBatchProcessing 추가
HelloWorldJobConfig
@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();
}
@Bean
@JobScope
public Step helloWorldStep() {
return stepBuilderFactory.get("helloWorldStep")
.tasklet(helloWorldTasklet()) //읽고 쓰고 할 데이터가 없을 때 사용
.build();
}
@Bean
@StepScope
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;
}
};
}
}

- --spring.batch.job.name 프로퍼티에 jobName을 전달해 주어야 한다.
- yml에 참조하도록 되어 있다.
- JobBuilderFactory, StepBuilderFactory를 주입받는다.
- helloWorldJob에서는 JobBuilderFactory를 통해 job을 생성하는데, 이때 Step이 필요하다.
- helloWorldStep에서는 StepBuilderFactory를 통해 step을 생성하는데, 이때는 읽고 쓰고 할 데이터가 없기 때문에 tasklet으로 생성한다.
- helloWorldTasklet 같은 경우 읽고 쓰는 작업이 따로 필요 없을 때 사용하고, 여기서는 "hello world spring batch"를 콘솔에 출력 후, RepeatStatus의 FINISHED를 반환한다.
- RepeatStatus의 FINISHED는 정상 수행 완료되었을 때 반환하는 상태코드이다.
728x90
'예제로 배우는 핵심 Spring Batch' 카테고리의 다른 글
| Ch06. 배치 작업의 기본, 파일 읽기와 쓰기 (0) | 2023.06.09 |
|---|---|
| Ch05. DB 데이터 이관 하기 (DB 데이터 읽고 쓰기) (0) | 2023.06.07 |
| Ch04. 배치 작업 실행 전, 후 로그 추가를 위한 리스너 (0) | 2023.06.07 |
| Ch03. 배치 실행 시 파라미터 (파일 이름) 받기 및 (csv)검증 (0) | 2023.06.07 |
| Ch01. 배치작업과 스프링 배치의 구조 (0) | 2023.05.19 |