전역 값
회사 프로젝트에서 resources
디렉토리에 있는 설정파일은 application.properties
를 사용한다.
그래서 여기에 값을 할당해주고 @Value
를 가져다가 사용한다.
properties
의 값을 가져올때는 @Value("${properties키 값}")
으로 불러오기 때문에
이번에 내가 진행하게된 프로젝트 설정파일 application.yaml
에도 똑같이 @Value
가 적용될줄 알았다.
근데 적용하려고 보니까 에러가 나는것이다.
에러메세지부터 바로 보자.
에러메세지
Could not resolve placeholder 'application.open-api.adminKey' in value "${application.open-api.adminKey}"
라는 에러가 발생했다.
설정을 전부 그대로 두고 다시 구현해보니까 그냥 성공하게 되는 이유는 무엇일까 🤔
추후에 다시 알아봐야 할 것 같다.
멍청하기는 아래의 해결법에서 yaml
의 키를 보면 admin-key
인데
위에 오류메세지에서는 adminKey
로 매핑을 시켰었다.
정말 한심하기 짝이없다. 👿👿👿👿👿👿
아무튼 이런 설정 방법도 있구나 라는것을 알아두면 되겠다.
해결법
벨덩 문서에 가보면 yaml
파일 설정에 대한 것을 설명해주었다.
이걸보고 나는 키값을 할당해주려고 아래와 같이 구현하였다.
application.yaml
open-api:
admin-key: 키값
authorization: 인증코드
YamlConfiguration.java
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "open-api") // 기본이 되는 뿌리 키값 여기서는 open-api이다.
@Getter
@Setter //setter가 없으면 Setter가 없다고 에러를 뱉어준다.
public class YamlConfiguration {
private String adminKey;
private String authorization;
}
여기서 @ConfigurationProperties
라는 어노테이션을 사용하려면 gradle에서
annotationProcessor
에 다음을 추가해주어야한다.
annotationProcessor (
// ...
'org.springframework.boot:spring-boot-configuration-processor'
)
그리고 사용하는 객체에서는 의존성 주입을 받아서 사용하면 되겠다.
public class Foo {
private final YamlConfiguration yamlConfiguration;
public Foo(YamlConfiguration yamlConfiguration) {
this.yamlConfiguration = yamlConfiguration;
}
public void test() {
yamlConfiguration.getAdminKey();
yamlConfiguration.getAuthorization();
}
}
@Value
와 Configuration
을 설정하는방법으로 어떤게 더 편한지 가독성이 좋은지 잘 모르겠다.
상황에 따라 편한걸 사용하는게 맞는지 이거는 조금 더 협업을 해보면 답이 찾아지지 않을까 싶다.
'디버깅' 카테고리의 다른 글
Jenkins 에러 (0) | 2022.08.11 |
---|---|
AWS SNS 토큰 에러 (0) | 2022.08.10 |
AbstractMessageConverter (0) | 2022.08.09 |
RequestParamMethodArgumentResolver (0) | 2022.08.09 |