inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

스프링 배치 5 변경점 정리

2020

구코딩

작성한 질문수 12

14

5버전으로 강의 따라가면서 정리하고 있습니다(현재진행중). 공유하고자 올려봅니다.

혹여나 틀린점 있으면 지적해주세용.

Execution context serialization Updates

섹션2~3

@EnableBatchProcessing 을 쓰게되면 BatchAutoConfiguration이 적용되지 않는다.

BuilderFactory대신 JobBuilder, StepBuilder 직접 사용

Tasklet 사용시 , PlatformTransactionManager 함께사용 (단일 사용 deprecated)

배치 설정 클래스 BasicBatchConfigurer DefaultBatchConfiguration으로 변경

 

섹션 3 - JobLauncher

주입받은 JobLauncher가 프록시객체가 아닌 실제 객체라서 DefaultBatchConfiguration 에서 JobLauncher를 얻어올 필요없이 바로 타입캐스팅 가능

섹션 4 - 배치 초기화 설정

spring:batch:job: names(x) -> name

실행 할 job을 찾지 못하면 예외가 발생합니다.

 

인텔리제이에 환경설정으로 프로그램 인수를 한개만 할당할 수 있게 변경되었습니다.

섹션 7 - 스프링 배치 청크 프로세스 이해

spring-boot spring-batch

답변 3

1

식빵

 

spring batch 5.0.0~5.1.x 버전 사용 시 BeanPostProcessor Warning Log 해결법 공유합니다.

 


문제점

image.png

현재 spring boot 3.3.x (spring batch 5.1) 버전 코드를 실행만 해도 위처럼 BeanPostProcessor 관련 Warning Log 가 나옵니다. 큰 문제를 일으키지는 않지만 굉장히 성가십니다.


해결법

이 로그가 보기 싫으면 2개의 Bean 을 등록하면 됩니다.
(spring batch 5.0 ~ 5.1 버전 일 때만 하시면 됩니다, 5.2 에서는 고쳐질 예정입니다.)

 

package coding.toast.springbatch;

import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class SpringBatchAppApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(SpringBatchAppApplication.class, args);
	}
	
	// https://github.com/spring-projects/spring-batch/issues/4519
	// https://docs.spring.io/spring-batch/reference/5.2-SNAPSHOT/job/advanced-meta-data.html#jobregistrysmartinitializingsingleton
	@Bean
	public static BeanDefinitionRegistryPostProcessor jobRegistryBeanPostProcessorRemover() {
		return registry -> registry.removeBeanDefinition("jobRegistryBeanPostProcessor");
	}
	
	@Bean
	public JobRegistrySmartInitializingSingleton jobRegistrySmartInitializingSingleton(JobRegistry jobRegistry) {
		return new JobRegistrySmartInitializingSingleton(jobRegistry);
	}
}


- BeanDefinitionRegistryPostProcessor : 문제가 되는 JobRegistryBeanPostProcessor 제거
- JobRegistrySmartInitializingSingleton : JobRegistryBeanPostProcessor 을 대체함

 


참고

참고로 이 문제는 Spring batch 5.2 (=> Spring Boot 3.4.x 적용 예정) 에서 고쳐질 예정입니다.

 

 


 

 

ps.2024-11-22

현재 시간(2024-11-22)부로 Spring Boot 3.4 가 나왔고,

내부적으로 사용하는 Spring Batch 의 버전도 5.2 올라갔습니다.

테스트해본 결과 위에서 말한 복잡한 설정을 안해도 이제는 WARNING 로그가 뜨지 않습니다!

idea64_ILgb7PX4Sb.png

 

1

beSlow

세세하게 정리해주셔서 감사합니다. 덕분에 무리없이 따라가고 있습니다!

1

정수원

감사합니다^^

스프링 배치 버전 질문

0

122

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

92

1

질문이 있습니다.

0

130

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

125

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

252

1

Batch 성능 질문

0

153

1

ItemReaderAdapter 종료

0

80

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

236

2

retry count 관련 질문

0

172

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

203

2

job 재실행

0

251

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

175

2

jdbcCursorReader, jdbcPagingReader 질문

0

146

1

step muti-thread 질문

0

110

1

itemSteam open update close 질문

0

112

1