백엔드/Spring Batch

스프링 배치 5.x 알아보기

infitry 2023. 4. 23. 18:34
반응형

Spring Batch 5.x

이 글은 스프링 배치에 대한 기본적인 지식은 알고 있다고 가정한 후 작성되었습니다. 

스프링 배치 기본적인 지식에 대한 이해 후 읽어주세요!

 

회사에서 스프링 배치에 대해 사용할 일이 생겼습니다.
기존 스프링 배치 4.x 버전 하위 버전에 대한 예제는 많으나, 스프링 부트 2.x 버전은 버그수정, 보안 업데이트를
2023년 말까지 지원합니다.
또한, 스프링 부트 3.x 는 Java 17 부터 지원하고 Java EE 대신 Jakarta EE를 사용하여 패키지 명이 전면적으로 수정되었습니다.
때문에 5.x 버전과 스프링 부트 3.x 버전을 선택하였습니다.

 

스프링 부트 3.x 에서는 스프링 6.x 기반으로 작성되었습니다.

스프링 6.x 에서는 스프링 배치 5.x 를 사용합니다. 

 

기존 스프링 배치와 많은 부분이 달라졌습니다.

 

1. @EnableBatchProcessing 제외

@EnableBatchProcessing을 사용하지 않아도 됩니다.
기본적으로 스프링 배치 어플리케이션은 실행하게 되면 Job 들을 실행하게 됩니다.

그러나 아무리 실행해도 제가 만든 Job 은 실행되지 않았고 원인을 확인해 보니 5.0에서는 더 이상 @EnableBatchProcessing 어노테이션을 필요로 하지 않았습니다. 
제거 후 실행하니 정상적으로 Job 이 실행 되었습니다.

https://github.com/spring-projects/spring-batch/issues/4232

EnableBatchProcessing is no longer required. I tried your sample 
with Spring Boot 3.0.0-RC2 (Spring Batch 5.0.0-RC2) by removing 
@EnableBatchProcessing and the sample works as expected.

2. DefaultBatchConfiguration 클래스가 추가되었습니다.

datasource, charset 등 여러 옵션들을 DefaultBatchConfiguration 클래스를 상속받고 오버라이딩 해서 사용할 수 있습니다.

@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("job", jobRepository)
				// define job flow as needed
				.build();
	}

	@Override
	protected Charset getCharset() {
		return StandardCharsets.ISO_8859_1;
	}

}

3. JobBuilder 생성자가 변경되었습니다.

JobBuilder 생성 시 기존 name 만 인자로 넘기면 되었으나, name, jobRepository를 모두 명확하게 넘겨주어야 합니다.

4. StepBuilder 생성자가 변경되었습니다.

StepBuilder 도 JobBuilder와 마찬가지로 변경되었습니다.

StepBuilder 생성 시 기존 name 만 인자로 넘기면 되었으나, name, jobRepository를 모두 명확하게 넘겨주어야 합니다.

5. StepBuilder의 tasklet, chunk 메서드에서도 명시적으로 TransactionManger를 작성해줘야 합니다.

반응형