일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- migration
- Regular expression
- 정규표현식
- upgrade
- update
- MySQL
- nodejs
- Effective Java
- Spring Batch
- Chunk
- mysql 5.5
- 퀵소트
- current_date
- spring cloud
- eslint
- Webpack
- REACTJS
- expire_logs_days
- REACT
- log4j2
- Express
- Effective Java 3/e
- Node
- log_bin
- JavaScript
- java
- spring
- npm
- regex
- git
- Today
- Total
내 세상
[Spring Batch] Spring batch 본문
Spring Batch
- 큰 단위의 작업을 일괄 처리
- 대부분 처리량이 많고 비 실시간성 처리에 사용
- 대용량 데이터 계산, 정산, 통계, 데이터베이스, 변환 등
- 컴퓨터 자원을 최대로 활용
- 컴퓨터 자원 사용이 낮은 시간대에 배치를 처리하거나
- 배치만 처리하기 위해 사용자가 사용하지 않는 또 다른 컴퓨터 자원을 사용
- 사용자 상호작용으로 실행되기 보단, 스케줄러와 같은 시스템에 의해 실행되는 대상
- 예를 들면 매일 오전 10시에 배치 실행, 매주 월요일 12시 마다 실행
- crontab, jenkins ..
- 배치 처리를 하기 위한 Spring Framework 기반 기술
- Spring 에서 지원하는 기술 적용 가능
- DI, AOP, 서비스 추상화
- 스프링 배치의 실행 단위인 Job과 Step
- 비교적 간단한 작업(Tasklet) 단위 처리와 대량 묶음(Chunk) 단위 처리
Windows Intellij IDEA 무료버전의 경우, Spring Initializer가 없음.
해당 사이트를 통해서 진행해야함. https://start.spring.io/
Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.0.
-> 2.7.6 버전으로 변경해서 조치
아래는 Batch를 위한 테스트용 코드
package fastcampus.spring.batch.part1;
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.core.launch.support.RunIdIncrementer;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//@Sl4fj
public class HelloConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public HelloConfiguration(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Job helloJob() {
return jobBuilderFactory.get("hellojob")
.incrementer(new RunIdIncrementer())
.start(this.helloStep())
.build();
}
@Bean
public Step helloStep() {
return stepBuilderFactory.get("helloStep")
.tasklet((contribution, chunkContext) -> {
return RepeatStatus.FINISHED;
}).build();
}
}
실행시킬때, Program Arguments에 아래 문구 추가 해줘야함
--spring.batch.job.names=hellojob
application.properties를 yml로 변경함.
아래 처럼 설정해주면 job.name이 없을 때 동작하지 않음.
spring:
batch:
job:
names: ${job.name:NONE}
위 처럼 바꾸면 Program Arguments에 문구를 변경해줘야함
--job.names=hellojob
Job은 JobLauncher에 의해 실행,
Job은 배치의 실행 단위를 의미
Job은 N개의 step을 실행할 수 있으며, 흐름(Flow)를 관리할 수 있다.
- 예를 들면, A Step 실행 후 조건에 따라 B Step 또는 C Step 실행 예정
Step은 Job의 세부 실행 단위이며, N개가 등록돼 실행된다.
Step의 실행단위는 2가지로 나뉜다.
1. Chunk 기반: 하나의 큰 덩어리를 n개씩 나눠서 실행
2. Task 기반: 하나의 작업 기반으로 실행
Chunk 기반 Step은 ItemReader, ItemProcessor, ItemWriter가 있다. (Item은 배치 처리 대상 객체 의미)
- ItemReader: 배치 처리 대상 객체를 읽어 ItemProcessor 또는 ItemWriter에게 전달한다.
- 예를 들면, 파일 또는 DB에서 데이터를 읽는다.
- ItemProcessor: input 객체를 output 객체로 filtering 또는 processing 해 ItemWriter에게 전달한다.
- 예를 들면, ItemReader에서 읽은 데이터를 수정 또는 ItemWriter 대상인지 Filtering한다.
- ItemProcessor는 optional하다.
- ItemProcessor가 하는 일을 ItemReader 또는 ItemWriter가 대신할 수 있다.
- ItemWriter: 배치 처리 대상 객체를 처리한다.
- 예를 들면, DB Update를 하거나, 처리 대상 사용자에게 알림을 보낸다.
Spring Batch 메타데이터 정보 테이블
참고) https://jojoldu.tistory.com/326
3. Spring Batch 가이드 - 메타테이블엿보기
이번 시간에는 Spring Batch의 메타 테이블에 대해 좀 더 자세히 살펴보겠습니다. 작업한 모든 코드는 Github에 있으니 참고하시면 됩니다. 지난 시간에 Spring Batch의 메타 테이블을 살짝 보여드렸는데
jojoldu.tistory.com
'Technical > Spring Cloud' 카테고리의 다른 글
[Spring Batch] Tasklet, Chunk (0) | 2022.12.21 |
---|---|
[Spring Cloud] 장애 허용 시스템 구축, Circuit breaker, Spring Cloud Config, Spring Boot Admin (0) | 2022.12.20 |
[Spring Cloud] API 통합 단일 진입점 제공 (0) | 2022.12.19 |
[Spring Cloud] 12Factor, Architecture (0) | 2022.12.19 |
[Spring Cloud] DNS 매핑 및 읽기 요청 부하 분산 등 (0) | 2022.12.19 |