작성
·
19
·
수정됨
1
Spring Boot + Kotlin + java 21로 진행중이다.
먼저 좋은 강의 너무 고맙고,
나도 다른 사람의 Q&A 처럼 BatchConfig가 있어서 수행시에 부트만 떴다가 꺼지고 아무것도 출력되지 않아서 당황했다 (그래서 강의 자료에 더이상 불필요하다 보다는 제거하라고 명시하면 좋을 것 같다)
질문이 있는데
1. BatchConfig가 있고 없고가 어떤 것 때문에 수행결과에 차이점을 주는거야?
2. Kotlin을 사용한 Spring Boot에서는 @Import를 사용하지 않았는데, 이때도 자동으로 설정을 해주는걸까? BatchConfig가 있다는 것 자체로 배치 수행은 안하고 부트가 바로 끝나버려
두 질문 다 그냥 궁금증일 뿐이다.
BatchConfig를 제거하면 수행에는 문제가 없다.
답변 2
2
반갑다 💀
먼저, 좋은 지적이다.
"더 이상 불필요하다"보다는 **"제거하라"**고 명시하는 게 확실히 더 명확하겠군.
피드백 고맙다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Q1. BatchConfig가 있고 없고의 차이는?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
예제의 `BatchConfig`가 상속한(정확히는 `@Import`를 통해 가져온 - 지금 핸드폰 이슈로 확인이 어려운 점 양해 바란다. 원리는 동일하다) `DefaultBatchConfiguration` 타입의 빈 또는 챕터5에서 보게 될 `@EnableBatchProcessing`이 선언된 빈이 존재할 경우,
**Spring Boot의 자동 구성(Auto Configuration)이 비활성화된다.**
자동 구성이 비활성화되면 Spring Boot가 배치 Job을 자동으로 실행하지 않는다.
그래서 부트만 뜨고 Job은 실행 안 되고 종료되는 것이다.
`BatchConfig` 클래스가 `DefaultBatchConfiguration`을 상속하거나 `@EnableBatchProcessing`을 사용하면, Spring Boot의 자동 구성 조건이 충족되지 않아 배치 자동 실행이 막힌다.
**해결책:** `BatchConfig`를 제거하면 된다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
더 알고 싶다면
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 모든 내용은 **챕터5**에서 자세히 다루게 될 것이다.
지금은 무시해도 좋다.
만약 미리 알아보고 싶다면 `BatchAutoConfiguration` 코드를 뜯어보도록.
```java
@ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, ...)
```
이 조건 때문에 `DefaultBatchConfiguration` 타입의 빈이 있으면 자동 구성이 꺼지는 것이다.
> rm -rf BatchConfig.kt
> ./auto_configuration_activated.sh
KILL-9
0
안녕하세요, 인프런 AI 인턴입니다.
tjrwn0716님, Spring Boot 및 Spring Batch 설정과 관련된 질문을 주셨군요. 수강 중인 강의와 환경에서 나타나는 문제에 대해 설명드리겠습니다.
Spring Batch에서 BatchConfig
클래스는 추가적인 설정을 통해 배치 잡을 구성하거나 필요한 빈을 등록하기 위해 사용하는 경우가 있습니다. 그러나 Spring Boot는 일반적으로 자동 구성을 통해 기본적으로 필요한 설정을 자동으로 해 주기 때문에, 별도의 설정이 필요하지 않을 경우 BatchConfig
를 유지하는 것이 오히려 기본적으로 제공되는 설정과 충돌을 일으킬 수 있습니다.
배치 잡이 실행되지 않고 부트가 바로 종료되는 경우는 주로 잡 설정이 올바르게 연결되지 않아서 발생할 수 있습니다. BatchConfig
에서 불필요한 설정이 포함되었거나 스프링 부트가 자동으로 제공하는 빈들과 충돌이 일어날 때 이런 현상이 나타날 수 있습니다.
Spring Boot에서는 직접적으로 @Import
어노테이션을 사용하지 않더라도, @SpringBootApplication
이 있는 클래스의 패키지 이하를 스캔하여 자동 설정을 해 줍니다. 따라서, Kotlin에서 별도로 @Import
를 사용하지 않더라도 필요한 설정이 자동으로 적용됩니다. BatchConfig
클래스가 종종 이 과정에서 별도로 설정된 설정들을 반영하지 못하거나, 필요 없이 빈이 등록되어 관련 작업이 수행되지 않을 수 있습니다.
BatchConfig
를 제거했을 때 문제가 없이 수행된다는 것은 Spring Boot의 기본 설정만으로 실행에 필요한 설정이 이미 충분히 제공되고 있었다는 것을 의미합니다.
유사한 문제와 관련된 코멘트를 보신다면, 아래 링크를 확인하실 수 있습니다:
- Spring Batch와 Spring Boot의 자동 설정의 상관관계에 대한 답변
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
고맙다 !!!