본문 바로가기
Dev/Spring Boot

[SpringBoot] properties의 내용 Load의 2가지 방법

by zemba 2021. 11. 29.
반응형
SMALL

SpringBoot에서 properties등에 기록된 지정된 상수 값들 Load하는 방법은 2가지가 있습니다.

 

  1. application.yml을 사용
  2. 원하는 파일명의 yml을 사용

이렇게 2가지 방법으로 사용될수 있습니다.

1번이 기본적인 방법이며 2번은 정말 properties파일로 사용하기위한 용도로 생각하면 될것 같습니다.

 

application.yml

test:
	username: zemba
	password: 1234

1번 방법

@Configuration
class PropertyConfig(
	@Value("\$test.username") val username: String,
	@Value("\$test.password") val password: String,
)

SpringBootApplication 구동시 자동적으로 application.yml을 Load하기 때문에 바로 test.username, test.password를 @Value로 가져와서 사용할수 있습니다.

 

2번 방법

별도의 파일명을 사용하여 properties의 값을 Load하기 위해서는 아래와 같이 설정해줘야합니다

@Configuration
@PropertySource(value = "classpath:other-properties.yml")
class PropertyConfig(
	@Value("\$test.username") val username: String,
	@Value("\$test.password") val password: String,
)

 @PropertySource를 통하여 관련 yml 파일을 참조할수 있도록 지정해주어야 합니다. 

하지만 이렇게 해도 yml을 read할수 없기때문에 별도의 Factory를 지정해 주어야 합니다.

 

public class YamlPropertySourceFactory implements PropertySourceFactory {

	@Override
	public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource){
		YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
		factory.setResources(encodedResource.getResource());

		Properties properties = factory.getObject();

		return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties);
	}
}

Java로 관련 Class를 생성하여 기존 Config에 ymlProperties를 읽을수 있도록 설정해줍니다.

@Configuration
@PropertySource(value = ["classpath:other-properties.yml"], factory = YamlPropertySourceFactory::class)
class PropertyConfig(
	@Value("\$test.username") val username: String,
	@Value("\$test.password") val password: String,
)

위와 같이 하면 파일명이 다른 yml파일의 내용을 사용 가능합니다.

반응형
LIST

'Dev > Spring Boot' 카테고리의 다른 글

[SpringBoot] spring.config.activate.on-profile  (0) 2021.11.23

댓글