작성
·
972
·
수정됨
9
5버전으로 강의 따라가면서 정리하고 있습니다(현재진행중). 공유하고자 올려봅니다.
혹여나 틀린점 있으면 지적해주세용.
Execution context serialization Updates
https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide
ExecutionContext에 Base64로 인코딩된 데이터가 저장됩니다.
@Configuration
public class BatchConfig {
@Bean
public ExecutionContextSerializer jacksonSerializer() {
return new Jackson2ExecutionContextStringSerializer();
}
}
강의처럼 데이터를 json으로 저장하고 싶으면, jackson-core의존성을 추가한 후, 위 설정클래스를 정의합니다.
섹션2~3
@EnableBatchProcessing 을 쓰게되면 BatchAutoConfiguration이 적용되지 않는다.
자동 구성과 수동 구성 요소가 동시에 존재할 때 발생할 수 있는 모호성과 충돌을 피하기 위해
BuilderFactory대신 JobBuilder, StepBuilder 직접 사용
팩토리 클래스들은 종종 불필요한 복잡성을 추가하고, Spring Batch 구성의 일관성을 떨어뜨림.
직접 사용해서 더 많은 제어 권한 획득
Tasklet 사용시 , PlatformTransactionManager
함께사용 (단일 사용 deprecated)
배치 설정 클래스 BasicBatchConfigurer
→ DefaultBatchConfiguration
으로 변경
섹션 3 - JobLauncher
주입받은 JobLauncher가 프록시객체가 아닌 실제 객체라서 DefaultBatchConfiguration
에서 JobLauncher를 얻어올 필요없이 바로 타입캐스팅 가능
섹션 4 - 배치 초기화 설정
spring:batch:job: names(x) -> name
실행 할 job을 찾지 못하면 예외가 발생합니다.
인텔리제이에 환경설정으로 프로그램 인수를 한개만 할당할 수 있게 변경되었습니다.
파라미터 관련해서는 코드로 할당해줘야 합니다.
multiple jobs 실행 불가능.
JobLauncherApplicationRunner 의 executeLocalJobs 메서드에서 split으로 job 이름을 구분하는 코드가 삭제되었습니다.
섹션 7 - 스프링 배치 청크 프로세스 이해
chunk사용시 , PlatformTransactionManager
함께사용 (단일 사용 deprecated)
ItemWriter의 write(List<? extends String> items ) -> write(Chunk<? extends String> chunk)
Items에 접근하려면 getItems로 꺼내야합니다.
답변 3
1
spring batch 5.0.0~5.1.x 버전 사용 시 BeanPostProcessor Warning Log
해결법 공유합니다.
현재 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
적용 예정) 에서 고쳐질 예정입니다.
현재 시간(2024-11-22)부로 Spring Boot 3.4 가 나왔고,
내부적으로 사용하는 Spring Batch 의 버전도 5.2 올라갔습니다.
테스트해본 결과 아래에 작성한 것처럼 굳이 설정을 안해도, 이제는 WARNING 로그가 뜨지 않습니다. 해결된 거 같습니다!
1
1