[Spring] yml 파일의 값을 상수로 초기화 하기

2022. 4. 8. 15:19Spring/Basic

300x250
반응형

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_keyplayground.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 필드로 읽어들이기 위해 지켜야할 규칙은 다음과 같습니다.

  1. @Component 필수
  2. 필드값과 getter 함수는 static 설정
  3. setter함수에 @Value를 이용해 프로퍼티값 inject
  4. 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
300x250
반응형

TAG