사용자 도구

사이트 도구


springframework:springboot:properties

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
springframework:springboot:properties [2021/01/11 22:05]
kwon37xi [profile include]
springframework:springboot:properties [2021/09/28 18:09]
kwon37xi
줄 2: 줄 2:
   * [[springframework:springboot|SpringBoot]] 에서 설정 값 외재화   * [[springframework:springboot|SpringBoot]] 에서 설정 값 외재화
   * 보통 ''yml''을 이용해서 ''application.yml''로 지정한다.   * 보통 ''yml''을 이용해서 ''application.yml''로 지정한다.
 +  * ''YamlPropertiesFactoryBean''
 +  * ''PropertiesFactoryBean''
 +  * ''YamlPropertySourceLoader''
 +  * ''PropertiesPropertySourceLoader''
 +
 +===== 기본값 설정 =====
 +  * 이미 지정된 property 이면, 해당 값을 사용하고, 그게 아니면 기본값을 사용하는 구조로
 +  * ''EXTERNAL_USERNAME/EXTERNAL_PASSWORD'' 환경 변수 혹은 ''external.username/external.password'' 프라퍼티가 존재하면 그 값을 사용하고 그게 아니면 '':'' 뒤에 지정된 값을 사용한다.
 +<code yml>
 +testing:
 +  my:
 +    username: ${external.username:system}
 +    password: ${external.password:test}
 +</code>
 +  * [[https://stackoverflow.com/a/49644607/1051402|SpEL로 기본값 지정]]. SpEL은 ''@Value''로 값을 읽는 경우에만 지정 가능하며, ''@ConfigurationProperties''를 사용할 때는 안 된다. 혼란스럽기 때문에 안 사용하는게 나을듯 하다.
 +
 +<code yml>
 +testing:
 +  my:
 +    username: ${external.username:user}
 +    password: ${external.password:#{' test'}}
 +</code>
 +<code java>
 +@Value("${testing.my.username}")
 +private String username;
 +
 +@Value("${testing.my.password}")
 +private String password;
 +</code>
  
 ===== profile 별 설정 ===== ===== profile 별 설정 =====
줄 93: 줄 122:
   * [[https://github.com/spring-projects/spring-framework/blob/master/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlPropertiesFactoryBean.java|YamlPropertiesFactoryBean]] 를 사용하여 yaml을 ''Property'' 객체로 적재할 수 있다. ''PropertySource''로 등록되는 것은 아니므로 헷갈리면 안된다.   * [[https://github.com/spring-projects/spring-framework/blob/master/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlPropertiesFactoryBean.java|YamlPropertiesFactoryBean]] 를 사용하여 yaml을 ''Property'' 객체로 적재할 수 있다. ''PropertySource''로 등록되는 것은 아니므로 헷갈리면 안된다.
   * 이 경우 ''@Value("#propertyObjectName['key']")'' 형태로 사용가능해 진다.   * 이 경우 ''@Value("#propertyObjectName['key']")'' 형태로 사용가능해 진다.
 +
 +===== YAML을 ''@PropertySource''로 사용하기 =====
 +  * [[https://github.com/spring-projects/spring-framework/blob/master/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlPropertiesFactoryBean.java|YamlPropertiesFactoryBean]] 로 명시적으로 지정해줄 수 있다.
 +  * [[https://www.baeldung.com/spring-yaml-propertysource|@PropertySource with YAML Files in Spring Boot | Baeldung]]
 +
 +<code java>
 +@PropertySource(
 +    value = "classpath:foo.yml", 
 +    factory = YamlPropertySourceFactory.class
 +)
 +</code>
 +
 +<code java>
 +public class YamlPropertySourceFactory implements PropertySourceFactory {
 +
 +    @Override
 +    public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource) 
 +      throws IOException {
 +        YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
 +        factory.setResources(encodedResource.getResource());
 +
 +        Properties properties = factory.getObject();
 +
 +        return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties);
 +    }
 +}
 +
 +</code>
 ===== @ConfigurationProperties ===== ===== @ConfigurationProperties =====
   * ''@EnableConfigurationProperties'' 가 설정돼 있어야 한다.   * ''@EnableConfigurationProperties'' 가 설정돼 있어야 한다.
줄 126: 줄 183:
 ===== 모든 properties 로그로 남기기 ===== ===== 모든 properties 로그로 남기기 =====
   * [[https://gist.github.com/sandor-nemeth/f6d2899b714e017266cb9cce66bc719d|PropertyLogger.java]]   * [[https://gist.github.com/sandor-nemeth/f6d2899b714e017266cb9cce66bc719d|PropertyLogger.java]]
-  * 아래와 같이 ''ContextRefreshEvent'' 를 받는 ''@EventListener'' Bean을 등록해주고, 거기서 로깅하면 된다.+  * 최종적으로 결정된 properties 목록을 확인하고자 할 때, 아래와 같이 ''ContextRefreshEvent'' 를 받는 ''@EventListener'' Bean을 등록해주고, 거기서 로깅하면 된다.
 <code java> <code java>
 @Component @Component
springframework/springboot/properties.txt · 마지막으로 수정됨: 2024/03/04 16:27 저자 kwon37xi