이번 게시글에서는 SpringBatch에서 Jackson2ExecutionContextStringSerializer를 사용하는 방법에 대해서 소개할 것이다.
Jackson2ExecutionContextStringSerializer는 ExecutionContext를 Jackson2 라이브러리를 사용하여 직렬화한다. 많은 사람들이 이를 기본 설정으로 알고 있지만, Spring Batch 5 버전으로 넘어오면서 DefaultExecutionContextSerializer가 기본 사용되도록 변경되었다.
Starting from v5, the DefaultExecutionContextSerializer was updated to serialize/deserialize the context to/from Base64.
그래서 아래 이미지처럼 ExecutionContext에 Base64로 인코딩된 데이터가 저장된다.
정기결제 기능을 구현하기 위해 Spring Batch를 학습 중인데, Base64로 인코딩된 데이터는 눈으로 확인하기 불편하다. 따라서 Jackson2ExecutionContextStringSerializer를 적용하기로 결정했다. 이에 대한 정보는 Spring Batch Project Lead, Mahmoud Ben Hassine님의 Stack Overflow 댓글을 참고했다.
Is there a way to use Spring Batch 5 default configuration and use Jackson Serializer?
Spring Batch 5에 관련해서도 소개 영상을 올리셨으니, 한번쯤 들어보는 것을 추천한다.
What's new in Spring Batch 5 by Mahmoud Ben Hassine @ Spring I/O 2023
Spring Batch Project Lead, Mahmoud Ben Hassine님의 Stack Overflow 댓글을 기반으로 작성하였고, 아래와 같다.
@Configuration
@EnableBatchProcessing(executionContextSerializerRef = "jacksonSerializer")
public class BatchConfig {
@Bean
public ExecutionContextSerializer jacksonSerializer() {
return new Jackson2ExecutionContextStringSerializer();
}
}
@Configuration
public class BatchConfig extends DefaultBatchConfiguration {
@Override
protected ExecutionContextSerializer getExecutionContextSerializer() {
return new Jackson2ExecutionContextStringSerializer();
}
}
@EnableBatchProcessing과 DefaultBatchConfiguration을 함께 사용하면 안 된다. 따라서, 현재 프로젝트에 적용한 설정에 맞춰서 선택적으로 사용해야 한다.
@EnableBatchProcessing을 사용하거나 DefaultBatchConfiguration을 상속하여 구현할 경우, Spring Batch의 자동 설정을 밀어내게 된다. 이로 인해 spring.batch.jdbc.initialize-schema와 같은 설정이 작동하지 않게 된다.