일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 도커
- Service Registry
- git
- CORS
- ionic install
- Service Discovery
- 아이오닉
- datasource
- spring boot
- ionic
- spring boot rest api
- yml 여러개
- mariadb
- gitlab
- docker isntall
- 도커 설치
- Spring cloud
- yml constant
- api 서버
- github
- Spring
- spring constant
- docker
- 아이오닉 설치
- MSA
- 다중 yml
- 16.04
- eureka
- multiple yml
- Rest
- Today
- Total
개발 메모장
[Spring] Multiple YML(Constants) 파일 관리 본문
현재 많은 프로젝트들을 환경값을 application.properties 파일에서 application.yml파일로 관리를 하고 있다.
이렇게 되면서 Constants 역시 기존에는 class파일에서 yml파일로 관리를 하는 경우가 생겼고,
application.yml에서 물론 전부 관리할 수 있지만 별도의 yml파일로 분리하여 관리하여할 경우가 있어서, 해당 방법을 알아보자
기존의 application.yml은
@Configuration
public class CustomConfig {
public CustomConfig(@Value("${info.name}") String name){
//use Your Constants
}
}
이와 같은 방식으로 사용할 수 있었다.
1. resoures/constants.yml 생성
info :
code : abc123
key : afhjsd13
resoures 폴더 아래에 constants 정리한 yml 파일을 생성한다.
2. PropertySourceFactory 생성
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {
Properties propertiesFromYaml = loadYamlIntoProperties(resource);
String sourceName = name != null ? name : resource.getResource().getFilename();
return new PropertiesPropertySource(sourceName, propertiesFromYaml);
}
private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {
try {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
} catch (IllegalStateException e) {
Throwable cause = e.getCause();
if (cause instanceof FileNotFoundException)
throw (FileNotFoundException) e.getCause();
throw e;
}
}
}
YamlPropertySourceFactory : 지정한 classpath로 지정한 resource 파일을 Property값들이 저장된 Map으로 만들어 value를 가져올 수 있게 한다.
3. Configuration Class에 classPath설정
@Configuration
@PropertySource(value = "classpath:constants.yml",
factory = YamlPropertySourceFactory.class, ignoreResourceNotFound = true)
public class CustomConfig {
public class CumstomConfig(@Value("${info.code}") String code){
//use code value
}
}
@PropertySource를 추가하여 필요한 yml파일을 지정해주고, 아까 생성한 YamlPropertySourceFactory을 factory에 등록한다. 만약 yml 파일이 아닌 properties 파일을 추가할 경우에는 factory를 등록하지않고 사용하면 된다.
ignoreResourceNotFound는 지정한 resource 파일을 찾을 수 없을 경우 에러를 발생여부를 지정할 수 있다.
이렇게 되면 Constructor 뿐만 아니라 @Bean에서도 @Value를 바로 받아 사용할 수 있다.
(추가) 여러개의 resource 파일이 필요할 경우
@PropertySource(value = {"classpath:constants.yml", "classpath:constants1.yml",
"classpath:constants3.yml"}, factory =.....)
public class CustomConfig{
}
value에 array 형태로 다중 resource 파일을 등록할 수 있다.
'Server' 카테고리의 다른 글
[Spring] MySQL(Maria) DataSource 프로퍼티 (0) | 2021.05.01 |
---|---|
[Spring Cloud] Eureka Server / Client 구성하기 (0) | 2020.08.12 |
[Spring Boot] Rest API Server(2) - 서버 기본동작(get,post,put,delete) (0) | 2020.08.08 |
[Spring Boot] Rest API Server(1) - IntelliJ 프로젝트 생성 (0) | 2020.08.08 |