inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 부트 - 핵심 원리와 활용

외부설정 사용 - @ConfigurationProperties 시작

현재 SpringBoot 3.2.1 부터 @ConfigurationProperties 를 사용한 설정값 바인딩에 이슈가 있는것 같습니다.

해결된 질문

3423

PrivilegeEscalate

작성한 질문수 27

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 로 다운그레이드하는 방법밖에 나오지가 않네요.. 확인좀 부탁드리곘습니다

spring spring-boot prometheus grafana

답변 1

0

김영한

안녕하세요. PrivilegeEscalate님

스프링 부트 3.2부터 발생하는 이슈인데요.

다음에 해결 방안을 정리해두었습니다 🙂

https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.b1yk4ued1pxo

 

관련 내용

해결 방안3(권장)

Gradle을 사용해서 빌드하고 실행한다.

참고로 이 문제는 Build, Execution, Deployment -> Build Tools -> Gradle에서
Build and run using를 IntelliJ IDEA로 선택한 경우에만 발생한다. Gradle로 선택한 경우에는 Gradle이 컴파일 시점에 해당 옵션을 자동으로 적용해준다.

 

문제 원인

공식 링크: https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x#parameter-name-retention

자바를 컴파일할 때 매개변수 이름을 읽을 수 있도록 남겨두어야 사용할 수 있다. 컴파일 시점에 -parameters 옵션을 사용하면 매개변수 이름을 사용할 수 있게 남겨둔다.

스프링 부트 3.2 전까지는 바이트코드를 파싱해서 매개변수 이름을 추론하려고 시도했다. 하지만 스프링 부트 3.2 부터는 이런 시도를 하지 않는다.

 

감사합니다.

0

PrivilegeEscalate

죄송합니다. 답변을 이제야 봤습니다. Build and run using 를 기존 Gradle 을 선택해주면 테스트코드 실행 및 애플리케이션 실행시 조금 느려지는것은 감수해야하는것일까요?

0

PrivilegeEscalate

특히나 테스트 코드를 실행할때 Gradle 로 실행하면 속도가 매우 느린것으로 기억합니다 ㅠ

2

김영한

안녕하세요. PrivilegeEscalate님

Gradle의 경우 캐싱 기능이 있어서 두번째 실행하는 경우에는 어느정도 속도가 나옵니다.

그래도 답답하다면 해결방안에 있는 해결방안 2를 선택하시면 됩니다.

감사합니다.

1

PrivilegeEscalate

오.. 굉장히 빠른 답변 감사합니다.

보안이 엄격한 데이터

0

73

1

MyProperties 자체를 클라이언트 코드에서 사용

1

43

1

http://localhost:8080/actuator/prometheus

0

85

3

jar 추가에대한 질문드려도될까요?

0

64

1

build.gradle bom link 변경

0

65

2

@Counted 초기화

0

47

1

@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..

0

101

2

springboot에서 actuator없이 micrometer를 사용할수 있나요?

0

67

1

@Configuration 질문드립니다.

0

84

2

[공유] 터미널 말고 IDE 에서 jar 실행하기

0

101

1

localhost:8080/hello-servlet 404오류

0

123

2

내장톰캣2 서블릿 톰켓 실행이 안됩니다

1

154

2

최대 Tomcat 스레드 수를 확인하는 지표

0

160

1

mac m2에서 startup.sh 실행후 아무 반응이 없습니다.

0

94

2

내장 톰캣 실행 오류 관련 질문드립니다.

0

158

1

스프링 발전 과정들도 자세히 알아둬야하나요??

1

127

1

스프링부트 ioc 컨테이너 갯수

0

89

1

404 페이지

0

133

3

actuator 호출시 타임스탬프 질문

0

90

1

순수 라이브러리 사용하기 2 - memory-v1

0

125

1

외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.

0

105

1

서블릿 컨테이너 초기화1 강의 관련 질문입니다~

0

93

1

Thread Config Max 패널 설정 변경 질문

0

128

1

스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.

0

107

1