[Spring] yml 파일의 값을 상수로 초기화 하기
2022. 4. 8. 15:19ㆍSpring/Basic
반응형
YAML 파일에 정의된 프로퍼티 값을 상수로 초기화하여 프로젝트 전역에서 사용하는 방법을 알아봅시다.
먼저, 아래와같은 프로퍼티가 정의되어있습니다.
playground: relaxed-binding: api-key: vnhfM8vJjwzJEvGCqvNue9h8w77fhxPS secret_key: qEX3PSHHgm2mvaHur3RG2VD2eYbKc75j
상수로 읽어들일 필드값을 static으로 정의하고, setter에 static 변수를 set하는 코드를 작성합니다.
이때, @Value 설정은 setter 함수에 정의하면 됩니다.
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class PlaygroundProperties { static String apiKey; static String secretKey; @Value("${playground.relaxed-binding.api-key}") public void setApiKey(String apiKey) { PlaygroundProperties.apiKey = apiKey; } @Value("${playground.relaxed-binding.secret-key}") public void setSecretKey(String secretKey) { PlaygroundProperties.secretKey = secretKey; } }
Spring Boot에서는 Relaxed Binding을 지원하고 있어 playground.relaxed-binding.secret_key
를 playground.relaxed-binding.secret-key
로 읽어들일 수 있습니다.
Relaxed Binding에 대해 알고 싶다면 [Spring Boot Core] Spring Boot Relaxed Binding using yaml를 참고해주세요.
간단한 테스트를 위해 Test 코드를 작성해봅니다.
@SpringBootTest class PlaygroundPropertiesTest { @Test void test() { System.out.println("apiKey >> " + PlaygroundProperties.apiKey); System.out.println("secretKey >> " + PlaygroundProperties.secretKey); } }
테스트 코드를 실행해보면 아래와 같이 apiKey와 secretKey가 잘 읽어져 콘솔에 출력되는것을 확인할 수 있습니다.
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.5) 2022-04-08 15:11:19.200 INFO 17856 --- [ Test worker] x.a.j.d.p.PlaygroundPropertiesTest : Starting PlaygroundPropertiesTest using Java 17.0.2 on jini with PID 17856 (started by yeonj in C:\jini_box\java\workspaces\java-playground) 2022-04-08 15:11:19.201 INFO 17856 --- [ Test worker] x.a.j.d.p.PlaygroundPropertiesTest : The following 1 profile is active: "local" 2022-04-08 15:11:20.785 INFO 17856 --- [ Test worker] x.a.j.d.p.PlaygroundPropertiesTest : Started PlaygroundPropertiesTest in 1.997 seconds (JVM running for 3.261) apiKey >> vnhfM8vJjwzJEvGCqvNue9h8w77fhxPS secretKey >> qEX3PSHHgm2mvaHur3RG2VD2eYbKc75j BUILD SUCCESSFUL in 12s 4 actionable tasks: 2 executed, 2 up-to-date 오후 3:11:21: Execution finished ':test --tests "xyz.applebox.java.domain.property.PlaygroundPropertiesTest"'.
프로퍼티값을 static 필드로 읽어들이기 위해 지켜야할 규칙은 다음과 같습니다.
- @Component 필수
- 필드값과 getter 함수는 static 설정
- setter함수에 @Value를 이용해 프로퍼티값 inject
- setter함수는 static 설정 x
※ GitHub 에서 java-playground(v1.0.2)를 다운받아 볼 수 있습니다.
+++
- How to set static getter from yaml file
- How to inject properties to static field
- Externalized Configuration + static access
728x90
반응형
'Spring > Basic' 카테고리의 다른 글
[Spring Docs] DevTools (0) | 2024.10.04 |
---|---|
[Spring Boot Core] Spring Boot Relaxed Binding using yaml (0) | 2022.03.30 |
[Spring Boot] REST API의 request header, body logging 설정하기 (0) | 2020.10.20 |
[Thymeleaf] inline javascript에서 유니코드로 표기된 한글문자 한글로 표기 (0) | 2020.06.18 |
[Spring Boot] 프로퍼티 파일(yml) 여러개 설정하기 (0) | 2020.05.29 |