해결된 질문
작성
·
2.8K
·
수정됨
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 로 다운그레이드하는 방법밖에 나오지가 않네요.. 확인좀 부탁드리곘습니다
답변 1
0
안녕하세요. 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님
Gradle의 경우 캐싱 기능이 있어서 두번째 실행하는 경우에는 어느정도 속도가 나옵니다.
그래도 답답하다면 해결방안에 있는 해결방안 2를 선택하시면 됩니다.
감사합니다.
죄송합니다. 답변을 이제야 봤습니다.
Build and run using
를 기존Gradle
을 선택해주면 테스트코드 실행 및 애플리케이션 실행시 조금 느려지는것은 감수해야하는것일까요?