소개
스프링과 백엔드 개발에 아~주 관심이 많은 개발자입니다 ☺
게시글
질문&답변
2024.11.12
StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.
자문자답입니다. package coding.toast.batch.job.reader.listener; import org.springframework.batch.core.*; public class EmptyReadFailureListener implements StepExecutionListener { @Override public ExitStatus afterStep(StepExecution stepExecution) { // 기존에 이미 예외가 터져서 failed 된 상태인지 먼저 확인한다. if (!stepExecution.getStatus().equals(BatchStatus.FAILED)) { if (stepExecution.getReadCount() > 0) { return stepExecution.getExitStatus(); } else { // 추후 Job 과 Step 의 재기동을 위해서 BatchStatus.FAILED 를 꼭 설정합니다. // SimpleJob 에서는 이 설정을 하면 남아 있는 Step 들의 실행을 방지한다. stepExecution.setStatus(BatchStatus.FAILED); return ExitStatus.FAILED .addExitDescription("exit Because Of No Item Read"); } } return stepExecution.getExitStatus(); } } 이렇게 하면 결과적으로 다음과 같은 결과가 나옵니다.JobExecution : Batch Status = FAILED / EXIT STATUS = FAILED첫번째 StepExecution : Batch Status = FAILED / EXIT STATUS = FAILED두번째 StepExecution : 실행 자체가 안됩니다.키 포인트는 stepExecution.setStatus(BatchStatus.FAILED); 를 afterStep 메소드 내에서 한번 호출한다는 점입니다. 이렇게 됨으로써 Job, Step 모두 추후에 재실행이 됩니다. 그리고 만약에 SimpleJob 이 아니라 FlowJob 을 구성한다면 아래처럼 할 수도 있습니다.@Configuration @RequiredArgsConstructor public class MyJobConfig { private final JobRepository jobRepository; private final PlatformTransactionManager transactionManager; @Bean public Job customItemStreamConfigJob() { //@formatter:off return new JobBuilder("customItemStreamConfigJob", jobRepository) .start(customItemStreamConfigStep()) .on("FAILED") .fail() .from(customItemStreamConfigStep()) .on("*").to(simpleStep()) .end() .build(); // 조근 더 간단하게는 아래처럼 작성할 수 있습니다. // return new JobBuilder("customItemStreamConfigJob", jobRepository) // .start(customItemStreamConfigStep()) // .on("EMPTY_READ").fail() // .next(simpleStep()).end() // .build(); //@formatter:on } // 나머지 코드는 이전 질문에 작성한 예시코드와 동일합니다. // ...생략... } 참고한 글: java - Spring batch job exit status for failed step - Stack Overflow
- 0
- 2
- 26
질문&답변
2024.10.06
스프링 배치 5 변경점 정리
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 적용 예정) 에서 고쳐질 예정입니다.Multiple trationDelegate$BeanPostProcessorChecker Warnings Arise When Using Spring Boot 3.2.0 · Issue #4519 · spring-projects/spring-batch · GitHub What’s new in Spring Batch 5.2 :: Spring Batch
- 9
- 3
- 967
질문&답변
2024.10.04
jobLauncherTestUtils 빨간 줄 질문입니다.
(사진) 위 그림처럼 2개의 플러그인을 설치하시면 됩니다.Jakarta EE: Batch ApplicationSpring Batch참고: 빨간줄 나와도 잘됩니다. 저는 그냥 찝찝해서 설치해서 빨간줄 안 나오게 했습니다.
- 0
- 2
- 1.2K
질문&답변
2024.09.22
Xstream 관련 ForbiddenClassException 또는 CannotResolveClassException 해결방법
감사합니다~
- 2
- 2
- 454
질문&답변
2024.07.19
윈도우 사용자 질문
안녕하세요, 지나가던 Window 10 사용자입니다.개인적으로 Window 사용하시면 아래 2개를 설치하시는 것을 강력 추천합니다.(WSL2 기반) Docker DesktopWSL2 기반의 리눅스 (Ubuntu 추천)이러면 비록 호스트 환경(Window 환경) 에서 Docker Desktop 을 설치해도 WSL2 환경의 우분투에서도 docker 명령어가 똑같이 먹히도록 자동으로 설정됩니다.이러면 Linux 환경에서 Docker 를 활용하다보니, 미묘하게 mac 과 window 다른 점들을 전혀 신경쓰지 않아도 됩니다.
- 2
- 2
- 277