Spring Boot의 @ConfigurationProperties

사이드 프로젝트 작업 중 문제가 발생했습니다.

Spring Boot에서 *.properties 또는 *.yml 파일의 속성은 값을 Java 클래스에 바인딩하여 사용할 수 있습니다.

운영에 필요한 정보나 환경에 따라 변경될 수 있는 정보는 해당 파일에 저장하는 것을 권장합니다.

jwt 구현 중에 jwt 토큰 만료 시간과 jwt 비밀 키 값을 설정했습니다.

재산에 구했다

이 값을 여기에 저장하려는 이유는 운영, 개발 및 로컬에 따라 값이 변경될 수 있기 때문입니다.


Application.yml

이렇게 저장 재산 Jwt 토큰 공급자 유틸리티에서 사용됩니다.


Jwt 토큰 공급자

그 때 프로젝트에서 공동 작업하는 개발자의 코드 검토에서 @ConfigurationProperties를 사용하라는 조언을 받았습니다.

공식 문서에서는 구성 속성을 별도의 POJO(= 순수한 Java 객체)로 분할할 것을 권장합니다.

@ConfigurationProperties를 사용하여 코드를 리팩터링해 보겠습니다.


1. 스프링빈 만드는 방법 @건설 그걸 써

2. @ConfigurationProperties는 모두 동일한 접두사를 갖는 계층적 속성에서 가장 잘 작동합니다.

따라서 접두사를 추가하십시오. 여기에서 내가 작성한 속성에 동일한 접두사 jwt를 추가합니다.

삼. Spring 프레임워크는 표준 Java bean setter를 사용하기 때문에 setter는 각 속성에 대해 선언되어야 하므로 @Setter 주석이 추가됩니다.

※ 여기서 주의!
!

내가 정의한 구성의 접두사는 jwt입니다.

자아 ConfigProperties 클래스의 필드 중 하나와 이름이 같습니다.

속성 파일에 정의된 모든 속성을 자동으로 바인딩합니다.


변경 전 application.yml

스프링은 결속과 관련하여 완화된 규칙을 가지고 있습니다.

필수 규칙은 다음과 같습니다.

속성을 accessValidity Java 클래스 필드에 바인딩하려면 아래와 같이 계층 구조를 만들어야 합니다.


이러한 바인딩 규칙으로 인해 내가 구성한 속성이 있는 Java 클래스의 필드 이름을 accessValidity로 설정할 수 없습니다.

또는 접두사 이는 jwt.access를 사용하여 수행해야 하지만 jwt.refresh에 해당하는 pojo도 작성해야 합니다.

교대로 중첩된 속성사용이 불가능한 것은 아니지만 속성의 개수가 너무 많지는 않아서 굳이 복잡하게 할 필요가 없을 것 같아서 환경 속성을 변경했습니다.


application.yml 변경 후

이제 테스트 코드를 작성해 봅시다!


테스트 코드

성공적으로 작동합니다.

원천 : https://www.baeldung.com/configuration-properties-in-spring-boot