반응형
배치 시리즈
https://derveljunit.tistory.com/313
Git으로 소스보기
https://github.com/Derveljun/derveljun-batch-examples/tree/master/case1-hellobatch
간단한 실행 예제 - Hello Batch Job Step
Dependency Injection
maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
- spring-boot-starter-data-jpa
- h2
Simple Job Configuration
스프링배치 스키마 설치
만약 JobRepository를 설정하지 않았다면?
배치 실행에 있어 중요한 설정이기 때문에 로컬에 다음과 같은 DB가 설치되어 있다면, 자동으로 스키마 생성을 합니다.
batch-derby.properties
batch-h2.properties
batch-hsql.properties
batch-mysql.properties
batch-oracle.properties
batch-postgresql.properties
batch-sqlf.properties
batch-sqlserver.properties
batch-sybase.properties
JPA를 기본으로 설정해두었다면, JobConfigurer
에서 자동으로 스키마를 생성해줍니다.
자동설정이 아닌 직접 DDL을 통해 스키마를 생성하고 싶다면?
spring-batch-core-4.x.x.RELEASE.jar
파일 찾으세요.
인텔리J라면 External Libraries 안에서 찾으실 수 있습니다.org/springframework/batch/core
를 찾아가시면, DDL 파일을 찾으실 수 있습니다.
Environment Configuration
환경설정
- 임베디드 H2 사용 설정
spring:
profiles: local
datasource:
hikari:
jdbc-url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
show-sql: true
Java Configuration
@EnableBatchProcessing
을 설정해야만, 배치 실행이 가능합니다.
@EnableBatchProcessing // Batch 실행 설정
@SpringBootApplication
public class Case1HellobatchApplication {
public static void main(String[] args) {
SpringApplication.run(Case1HellobatchApplication.class, args);
}
}
실행계획
- Job 에서 Step1, Step2 를 차례대로 실행해보겠습니다.
package com.derveljun.batch.case1hellobatch;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@RequiredArgsConstructor // 간편하게 생성자 주입을 위한 Lombok 사용
@Configuration
public class HelloBatchJob {
private final String BATCH_NAME = "HelloBatchJob_";
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job job(){
return jobBuilderFactory.get(BATCH_NAME)
.start(step1())
.next(step2())
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get(BATCH_NAME + "Step1")
.tasklet((stepContribution, chunkContext) -> {
log.info(BATCH_NAME + "Step1 Started");
return RepeatStatus.FINISHED;
}).build();
}
@Bean
public Step step2() {
return stepBuilderFactory.get(BATCH_NAME + "Step2")
.tasklet((stepContribution, chunkContext) -> {
log.info((BATCH_NAME + "Step2 Started"));
return RepeatStatus.FINISHED;
}).build();
}
}
실행결과
- 설정된 데이터베이스와 DDL 이 없으니 자동으로 설정해주는 로그를 확인할 수 있습니다.
2020-01-27 15:54:24.808 INFO 11460 --- [ main] o.s.b.c.r.s.JobRepositoryFactoryBean : No database type set, using meta data indicating: H2
- Job 실행에서부터 Step1 , 2가 차례대로 실행한 걸 볼 수 있습니다.
2020-01-27 15:54:24.981 INFO 11460 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=HelloBatchJob_]] launched with the following parameters: [{}]
2020-01-27 15:54:25.004 INFO 11460 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [HelloBatchJob_Step1]
2020-01-27 15:54:25.010 INFO 11460 --- [ main] c.d.batch.case1hellobatch.HelloBatchJob : HelloBatchJob_Step1 Started
2020-01-27 15:54:25.014 INFO 11460 --- [ main] o.s.batch.core.step.AbstractStep : Step: [HelloBatchJob_Step1] executed in 10ms
2020-01-27 15:54:25.019 INFO 11460 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [HelloBatchJob_Step2]
2020-01-27 15:54:25.021 INFO 11460 --- [ main] c.d.batch.case1hellobatch.HelloBatchJob : HelloBatchJob_Step2 Started
2020-01-27 15:54:25.022 INFO 11460 --- [ main] o.s.batch.core.step.AbstractStep : Step: [HelloBatchJob_Step2] executed in 3ms
2020-01-27 15:54:25.024 INFO 11460 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=HelloBatchJob_]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 29ms
반응형
'Java & Spring' 카테고리의 다른 글
[트러블 슈팅] Jstack 을 통한 Thread Dump 및 분석 (0) | 2021.12.28 |
---|---|
JAVA 1.8 환경에서 MSSQL 접속 시 에러 해결 (0) | 2021.12.01 |
스프링 javax 에러 / 구형 스프링 프로젝트 javax 문제 / (0) | 2021.12.01 |
HTTP Range Requests 를 이용한 스프링 비디오 스트리밍 (1) | 2020.01.09 |
[Netty] Shared 된 ChannelHandler 사용시 Message 처리 (0) | 2017.01.27 |
WRITTEN BY
,