๐ข ๋ฐฐ๊ฒฝ
ํ ์ด ํ๋ก์ ํธ Spring Boot 3 ํ๊ฒฝ์์ Spring Batch 5๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ, ๊ธฐ์กด์ Spring Boot 2์์ ์ฌ์ฉํ๋ Job, Step ์ ์ธ ๋ฐฉ์์ผ๋ก๋ ์คํ๋์ง ์๋๋ค๋ ๊ฑธ ์๊ฒ ๋์๋ค.
0. ๊ธฐ๋ณธ ์กฐ๊ฑด
Spring Batch 5๋ Spring framework 6, Spring Boot 3 ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฏ๋ก ์ต์ Jdk 17์ ํ์๋ก ํ๋ค.
1. StepBuilderFactory, JobBuilderFactory = Deprecated
๊ธฐ์กด Spring Batch 4์์๋ JobBuilderFactory, StepBuilderFactory๋ฅผ ์ฌ์ฉํด Job๊ณผ Step ๊ตฌ์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ์๋ค. ํ์ง๋ง Spring Batch 5์์๋ BuilderFactory๊ฐ Deprecated ๋์์ผ๋ฏ๋ก, ์ง์ ๋ช ์ํ๋ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํ๋ค.
BuilderFactory๋ ์ฌ์ค Job, Step์ ๊ตฌ์ฑ๋ฟ ์๋๋ผ, JobRepository๋ฅผ ์์ฑํ๊ณ ์ค์ ํ๋ ๊ธฐ๋ฅ๋ ํฌํจํ๊ณ ์์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ Job, Step ์ ์ธ๋ฟ ์๋๋ผ JobRepository ๋ํ ๋ช ์์ ์ผ๋ก ์ ๊ณตํด์ผ ํ๋ค.
@Bean
public Job todayScheduleJob(JobRepository jobRepository, Step todayScheduleStep) {
return new JobBuilder("today-schedule-job", jobRepository)
.incrementer(new RunIdIncrementer())
.start(todayScheduleStep)
.build();
}
Step๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ํ Repository๋ฅผ ์ ๊ณตํด์ผ ํ๋ฉฐ Tasklet ๋๋ Chunk๋ฅผ ์ฌ์ฉํ ๋, TransactionManager๋ฅผ ๋ช ์์ ์ผ๋ก ์ ๊ณตํด์ผ ํ๋ค.
@Bean
public Step todayScheduleStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("today-schedule-step", jobRepository)
.tasklet((stepContribution, chunkContext) -> {
System.out.println("hello");
return RepeatStatus.FINISHED;
}, transactionManager).build();
}
2. @EnableBatchProcessing ์ฌ์ฉ์ ํ์๊ฐ ์๋๋ค.
๊ธฐ์กด์๋ @EnableBatchProcessing๋ฅผ ๋ฉ์ธ ํด๋์ค์ ์ ์ธํ๊ณ Job, Step๋ค์ ๋ณ๋์ ์ค์ ํด๋์ค์์ Bean์ผ๋ก ๋ฑ๋กํ๋ ํ์์ ์ฌ์ฉํ์๋ค. ํ์ง๋ง ๋ ์ด์ @EnableBatchProcessing์ ํ์๋ก ์ ์ธํ์ง ์์๋ ๋๋ค.
3. ์ค์ ์ปค์คํฐ ๋ง์ด์ง์ด ํ์ํ๋ค๋ฉด DefaultBatchConfiguration๋ฅผ ์์ํด ๋ณด์.
Spring Batch 5์์๋ DefaultBatchConfiguration ํด๋์ค๋ฅผ ์์ํด์ ์ฌ๋ฌ ์ค์ ๋ค์ ์ปค์คํฐ๋ง์ด์ง ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ค. ํ์ํ๋ค๋ฉด ํด๋น ํด๋์ค์์ ์ ๊ณตํ๋ getTransactionManager(), getDataSource(), getCharset() ๋ฑ์ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ฌ์ฉํ ์ ์๋ค.
@Override
protected Charset getCharset() {
return StandardCharsets.UTF_8;
}
์ฃผ์ํ ์ ์ @EnableBatchProcessing์ DefaultBatchConfiguration๋ฅผ ๋์์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ํ์ํ์ง ์๋ค๋ฉด ๋ ๋ค ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
REFERENCE
https://spring.io/guides/gs/batch-processing/
https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide
https://docs.spring.io/spring-batch/docs/current/reference/html/whatsnew.html
๋๊ธ