반응형
목차
스프링 배치를 이용한 정말 간단한 로그 찍는 프로그램이다.
main method가 있는 클래스 😄
package com.lsy.sample.springbatchvideo;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableBatchProcessing // 배치 프로그램임을 알리는 애노테이션임, 중요!!
@SpringBootApplication
public class SpringBatchVideoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchVideoApplication.class, args);
}
}
TestletJob 😊
package com.lsy.sample.springbatchvideo.batch;
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.JobScope;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@RequiredArgsConstructor
@Configuration
public class TestletJob {
//생성자 의존성 주입
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
//job
@Bean
public Job taskletJob_batchBuild() {
return jobBuilderFactory.get("taskletjob")
.start(taskletJob_step())
.next(taskletJob_step2(null))
.build();
}
//step1
@Bean
public Step taskletJob_step() {
return stepBuilderFactory.get("taskletJob_step1")
.tasklet((a, b) -> {
log.info(" ======> job =====> [step1]");
return RepeatStatus.FINISHED;
}).build();
}
//step2
@Bean
@JobScope
public Step taskletJob_step2(@Value("#{jobParameters[date]}") String date) {
return stepBuilderFactory.get("taskletJob_step2")
.tasklet((a, b) -> {
log.info(" ======> [step1] =====> [step2] [{}]", date);
return RepeatStatus.FINISHED;
}).build();
}
}
application.yml 😄
logging:
level:
root: info
com.lsy.sample: debug
spring:
jpa:
hibernate:
ddl-auto: update
use-new-id-generator-mappings: true
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL57Dialect
datasource:
url: jdbc:mysql://{ip}:{port}/{dbname}?serverTimezone=Asia/Seoul
username: #username
password: #password
batch:
job:
names: ${job.name:NONE}
기본 tasklet부분과 meta table 연동해서 날짜 parameter 받아서 화면에 출력하는 정도이다.
스프링 배치를 사용하기 위해선 메타 테이블이 있어야 한다.
메타 테이블 스크립트는 batch.core 패키지안에 schema-"벤더사명".sql파일이 있는데 여기에 스크립트가 있고 IDE에서 파일명으로 "schema"를 검색하면 되며 이 스크립트를 db툴로 돌리면 된다.
아키텍처 이미지는 구글링 하면 많이 나오므로 생략, 핵심은 아래와 같다.
하나의 Job이 1개 이상의 Step을 품고 있고 이 Step에서 ItemReader를 통해 데이터를 읽고
ItemProcessor로 읽은 데이터를 가공(선택사항)한 다음 ItemWriter를 통해 데이터를 쓰며 이런 job들은 JobRepository 역할을 하는 meta table에 저장된다.(이 테이블은 개발자가 수정 금지)
batch-meta-table 🙂
- batch_job_instance: 배치 인스턴스(최상위 부모, 동일한 job_name, job_key 중복 저장 X)
- batch_job_execution: 부모 배치 인스턴스의 수행 결과 저장(job의 시작 ~ 종료까지의 관련 정보 저장(생성시간, 시작시간, 종료시간, 실행상태, 종료코드, 종료메시지 등))
- batch_job_execution_context: 배치 실행 컨텍스트 저장(job의 실행 관련 context, 직렬화 context 정보 저장), 스텝 간 공유 가능
- batch_job_execution_params: 배치 실행 parameter 정보 저장
- batch_step_execution: 배치 스텝 수행 결과 저장으로 추정(스텝 관련 excution 정보 저장)
- batch_step_execution_context: 배치 스텝 실행 컨텍스트 저장(스텝 실행 관련 context 정보 저장), 스텝 간 공유 불가
- batch_job_seq: 부모 배치 인트선스 시퀀스
- batch_job_execution_seq: 배치 인스턴스 실행결과 시퀀스
- batch_step_execution_seq: 배치 스텝 실행결과 시퀀스
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
reference: https://www.youtube.com/watch?v=wy99cPHlMlA&list=PLogzC_RPf25HRSG9aO7qKrwbT-EecUMMR
다음 내용
반응형
'IT > development' 카테고리의 다른 글
[springBoot] spring batch simpleReader insert other table( feat. DB) (54) | 2023.11.10 |
---|---|
[springBoot] spring batch jpa simpleDbReader (feat. DB) (56) | 2023.11.10 |
[Java] linux jdk 환경변수 세팅 (54) | 2023.10.27 |
[springBoot] Spring AOP simple source (60) | 2023.10.19 |
[springBoot] springBoot 실행 시 dataSource 제외 (54) | 2023.10.14 |