728x90
배치
배치는 실시간으로 처리하는것이 아닌 처리할 작업물들을 모아 한번에 처리하는 것
예를들어 1년간 접속하지않은 모든 회원들을 휴먼계정으로 처리하는 등 일반적인 비즈니스로직이 아닌 상황에 대해서 처리해주는 프로세스
배치와 스케줄러의 차이
배치 | 스캐쥴러 |
---|---|
일괄 처리 | 정해진 시간에 자동으로 실행 |
사용자의 명령이 있을 때 실행 | 주기적으로 실행 |
Batch Job을 관리(Job을 구동하거나 실행시키는 기능 X ) |
Job, Tasklet, Chunk
Job
- 배치 처리 과정을 하나의 단위로 만든 객체
- 배치 처리 과정에 있어 전체 계층의 최상단에 위치
- 1개 이상의
Step
을 가짐 - Job 안에는 여러 개의
Step
이 존재하고, Step 안에는Tasklet
또는{Reader, Processor, Writer}
묶음이 존재
Tasklet vs Chunk
- 실제 처리 로직이 들어가 있는 빈
- 스프링배치에 처리를 하는 방식은 크게 Chunk 방식과 Tasklet 방식으로 나눌수 있음
Chunk
- Chunk 방식은 세가지 클래스 빈
ItemReader, ItemProcessor, ItemWriter
를 구현 - 이미 스프링 배치에서 작성해놓은 클래스들이 있어 그것을 이용
Tasklet
- Tasklet 인터페이스를 구현해 execute 함수를 오버라이딩 하고 개발자가 직접 작성
- execute 함수 안에 하고자 하는 기능을 넣어주면 됨
Demo
@Slf4j
@Configuration
public class SimpleJobConfiguration {
/*
Spring Batch에서 Job은 하나의 배치 작업 단위를 말합니다.
Job 안에서는 이처럼 여러 Step이 존재하고,
Step 안에는 Tasklet 혹은 Reader & Processor & Writer 묶음이 존재합니다.
*/
@Bean
public Job testSimpleJob(JobRepository jobRepository, Step testStep, Step testStep2){
return new JobBuilder("testSimpleJob", jobRepository)
.start(testStep)
.next(testStep2)
.build();
}
@Bean
public Step testStep(JobRepository jobRepository, Tasklet testTasklet, PlatformTransactionManager platformTransactionManager){
return new StepBuilder("testStep", jobRepository)
.tasklet(testTasklet, platformTransactionManager).build();
}
@Bean
public Step testStep2(JobRepository jobRepository, Tasklet testTasklet, PlatformTransactionManager platformTransactionManager){
return new StepBuilder("testStep2", jobRepository)
.tasklet(testTasklet, platformTransactionManager).build();
}
@Bean
public Tasklet testTasklet(){
return ((contribution, chunkContext) -> {
System.out.println("테스트1");
return RepeatStatus.FINISHED;
});
}
}
실행 결과
2023-11-20T14:48:42.083+09:00 INFO 11224 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=testSimpleJob]] launched with the following parameters: [{}]
2023-11-20T14:48:42.098+09:00 INFO 11224 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [testStep]
테스트1
2023-11-20T14:48:42.106+09:00 INFO 11224 --- [ main] o.s.batch.core.step.AbstractStep : Step: [testStep] executed in 8ms
2023-11-20T14:48:42.109+09:00 INFO 11224 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [testStep2]
테스트1
2023-11-20T14:48:42.111+09:00 INFO 11224 --- [ main] o.s.batch.core.step.AbstractStep : Step: [testStep2] executed in 1ms
2023-11-20T14:48:42.113+09:00 INFO 11224 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=testSimpleJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 23ms
Batch 스키마 설정, 메타 데이터
- 이전에 실행한 Job이 어떤 것들이 있는지
- 최근 실패한 Batch Parameter가 어떤 것들이 있고, 성공한 Job은 어떤 것들이 있는지
- 다시 실행하면 어디서부터 다시 실행해야하는지
- 어떤 Job에 어떤 Step들이 있고, Step들 중에서도 성공한 Step이 무엇이고 실패한 Step은 무엇이 있는지
728x90