[Spring Batch] Batch Job
- Spring/Batch
- 2020. 8. 17.
이번글에서는 Spring Batch를 사용해 간단한 Batch Job을 수행해보도록 하겠습니다.
1. Spring Batch Project
먼저 Spring Batch Project를 생성하도록 하겠습니다.
저는 'Spring Boot 2'와 'Gradle'을 사용하겠습니다. SQL은 'JPA'를 사용하도록 하겠습니다.
• Spring Boot 2
• Java 8
• Gradle
• JPA
Spring Intilizer를 사용해 각자 환경에 맞는 Spring Project를 생성합니다. 프로젝트 생성시 Spring Dependencies는 다음과 같이 선택합니다.
생성이 완료된 project의 build.gradle은 다음과 같습니다.
build.gradle
plugins {
id 'org.springframework.boot' version '2.2.4.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'com.tutorial'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// batch
compile 'org.springframework.boot:spring-boot-starter-batch'
// jpa
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
// jdbc
compile 'org.springframework.boot:spring-boot-starter-data-jdbc'
// h2
runtimeOnly 'com.h2database:h2'
// mysql
runtimeOnly 'mysql:mysql-connector-java'
//maria db
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
// lombok
compileOnly 'org.projectlombok:lombok'
// test
testCompile 'org.springframework.boot:spring-boot-starter-test'
// batch test
testCompile 'org.springframework.batch:spring-batch-test'
}
test {
useJUnitPlatform()
}
2. Simple Job
이제 간단한 Spring Batch Job을 생성해보도록 하겠습니다.
2-1) enable spring batch
먼저 main class를 열어 다음과 같이 @EnableBatchProcessing 어노테이션을 선언합니다.
이를 통해 spring project에서 Spring Batch 기능을 사용할 수 있게 됩니다.
2-2) create simple job
다음으로 job 패키지를 생성해 SimpleJobConfig 파일을 다음과 같이 생성합니다.
SimpleJobConfig
@Slf4j // log 사용을 위한 lombok 어노테이션
@RequiredArgsConstructor // 생성자 DI를 위한 lombok 어노테이션
@Configuration
public class SimpleJobConfig {
private final JobBuilderFactory jobBuilderFactory; // 생성자 DI 받음
private final StepBuilderFactory stepBuilderFactory; // 생성자 DI 받음
@Bean
public Job simpleJob(){
return jobBuilderFactory.get("simpleJob")
.start(simpleStep1())
.build();
}
@Bean
public Step simpleStep1(){
return stepBuilderFactory.get("simpleStep1")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is Step1");
return RepeatStatus.FINISHED;
})
.build();
}
}
• @Configuration : Spring Batch의 모든 Job은 @Configuration으로 등록해 사용합니다.
• jobBuilderFactory.get("simpleJob") : "simpleJob"이란 이름의 Batch Job을 생성합니다. job 이름은 별도로 지정하지 않고, Builder를 통해 지정합니다.
• stepBuilderFactory.get("simpleStep1") : "simpleStep1"이란 이름의 Batch Step을 생성합니다. 마찬가지로 Builder를 통해 이름을 지정합니다.
• tasklet((contribution, chunkContext)) : step에서 수행될 기능들을 명시합니다. tasklet은 Step안에서 '단일로 수행될 custom 기능'을 선언할 때 사용합니다.
위의 Simple Bacth Job은 Batch가 수행되면 단순히 log.info(">>>>> This is Step1")를 출력하는 Job 입니다. 😎
위와 같이 작성후 @EnableBatchProcessing 어노테이션을 선언했던 main 클래스를 실행시켜보면, 아래와 같이 정상적으로 Batch Job이 수행된 것을 확인할 수 있습니다.
3. Job Structure
위의 Batch Job 코드를 살펴보면 simepleJob(Job)이 simepleStep1(Step)을 품고 있음을 확인할 수 있습니다.
Spring Batch에서 Job은 하나의 배치 작업단위를 의미합니다. 이때 Job은 여러 Step으로 구성되어있습니다. 하나의 Batch 작업을 수행하기위해 몇 단계의 Step을 밟도록 구성할 수 있다고 이해하시면 됩니다.
Step은 Tasklet 혹은 Reader/Processor/Writer의 묶음으로 구성되어 있습니다.
이때 Tasklet 하나와 Reader/Porcessor/Writer 묶음은 같은 레벨의 단위로, Reader/Processor가 끝나고 Tasklet으로 마무리 짓는 등의 구성은 할 수 없습니다.
참고 자료 : https://jojoldu.tistory.com/325
추천서적
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Spring > Batch' 카테고리의 다른 글
[Spring Batch] Meta Data Table (0) | 2020.08.17 |
---|---|
[Spring Batch] MySQL (0) | 2020.08.17 |
[Spring Batch] Batch Application (0) | 2020.08.17 |