-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
현재 SpringBoot 3.2.1 부터 @ConfigurationProperties 를 사용한 설정값 바인딩에 이슈가 있는것 같습니다.
24.01.13 13:06 작성 24.01.13 13:11 수정 조회수 1.43k
1
안녕하세요! 질문 내용은 제목과 같습니다. 스프링부트 3.2.1 부터 @ConfigurationProperties
가 동작하지 않는것 같습니다. 확실하지 않지만 스텍오버플로우에도 비슷한 이슈가 올라온 상태인것 같습니다. https://stackoverflow.com/questions/77703018/spring-boot-3-2-1-properties-binding
스프링부트 3.2.1 에서 저는 아래와 같은 익셉션이 발생합니다,
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.1'
id 'io.spring.dependency-management' version '1.1.4'
}
token:
expired: 20s
secret-key: test-key
@ToString
@AllArgsConstructor
@ConfigurationProperties(prefix = "token")
public class TokenProperties {
private Duration expired;
private String secretKey;
}
@Slf4j
@RequiredArgsConstructor
@Component
@EnableConfigurationProperties(TokenProperties.class)
public class TokenConfiguration {
private final TokenProperties tokenProperties;
@PostConstruct
void init() {
log.info("tokenProperties = {}", tokenProperties);
}
}
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'token' to revi1337.configurationpropertiesdemo.property.TokenProperties:
Reason: java.lang.IllegalStateException: Unable to create instance for revi1337.configurationpropertiesdemo.property.TokenProperties
This may be due to missing parameter name information
Action:
Update your application's configuration
이 상태에서 스프링 버전을 3.1.5 으로 다운그레이드하면 정상동작합니다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.4'
}
현재 스프링 3.2.1 에서 뭐 바뀐게 있을까요? 제가 무언가를 잘못했을 확률이 대단히 높지만
제가 찾아볼때는 명확한 해결방법이 3.1.5 로 다운그레이드하는 방법밖에 나오지가 않네요.. 확인좀 부탁드리곘습니다
답변을 작성해보세요.
0
김영한
지식공유자2024.01.13
안녕하세요. PrivilegeEscalate님
스프링 부트 3.2부터 발생하는 이슈인데요.
다음에 해결 방안을 정리해두었습니다 🙂
관련 내용
해결 방안3(권장)
Gradle을 사용해서 빌드하고 실행한다.
참고로 이 문제는 Build, Execution, Deployment -> Build Tools -> Gradle에서
Build and run using를 IntelliJ IDEA로 선택한 경우에만 발생한다. Gradle로 선택한 경우에는 Gradle이 컴파일 시점에 해당 옵션을 자동으로 적용해준다.
문제 원인
자바를 컴파일할 때 매개변수 이름을 읽을 수 있도록 남겨두어야 사용할 수 있다. 컴파일 시점에 -parameters 옵션을 사용하면 매개변수 이름을 사용할 수 있게 남겨둔다.
스프링 부트 3.2 전까지는 바이트코드를 파싱해서 매개변수 이름을 추론하려고 시도했다. 하지만 스프링 부트 3.2 부터는 이런 시도를 하지 않는다.
감사합니다.
PrivilegeEscalate
질문자2024.01.18
죄송합니다. 답변을 이제야 봤습니다. Build and run using
를 기존 Gradle
을 선택해주면 테스트코드 실행 및 애플리케이션 실행시 조금 느려지는것은 감수해야하는것일까요?
김영한
지식공유자2024.01.18
안녕하세요. PrivilegeEscalate님
Gradle의 경우 캐싱 기능이 있어서 두번째 실행하는 경우에는 어느정도 속도가 나옵니다.
그래도 답답하다면 해결방안에 있는 해결방안 2를 선택하시면 됩니다.
감사합니다.
답변 1