Cloud Native Java 따라하기 2
by Jeongjin Kim
앞선 Cloud Native Java 포스트에서는 스프링 프레임워크에서 어떻게 설정 값을들 객체와 매핑하여 사용할 수 있는지 설정했다. 스프링부트에서는 어떻게 쓸 수 있는지 알아보자.
스프링 부트 방식의 설정
설정정보의 우선순위
- 명령행 인자
java:comp/env
에 있는 JNDI 속성System.getProperties()
로 읽어오는 속성- 운영체제의 환경 변수
- jar 외부에 존재하는
application.properties
파일이나application.yml
파일에 정의된 속성 - jar 내부에 존재하는
application.properties
파일이나application.yml
파일에 정의된 속성 @Configuration
이 붙은 클래스에@PropertySource
로 지정된 곳에 있는 속성SpringApplication.getDefaultProperties()
로 읽어올 수 있는 기본값
특정 프로파일이 활성화되어 있으면 프로파일 이름을 기준으로 src/main/resources/application-활성프로파일이름.properties
파일에 있는 속성 정보를 자동으로 일어올 수 있다.
클래스 패스에 SnakeYAML 라이브러리가 있으면 자동으로 YAML 파일에서도 properties 파일과 같은 방식으로 속성정보를 가져올 수 있다.
$CONFIGURATION_PROJECT
라는 환경변수를 사용하거나 -Dconfiguration.projectname
옵션을 추가해서 스프링부트 애플리케이션을 실행하면 소스코드에서 configuration.projectName
이라는 키로 설정값을 읽어올 수 있다.
프로젝트에서 스프링부트를 사용할 수 있도록 pom.xml 을 변경하자. parent에 spring-boot-starter-parent
를 선언했다. 이걸 이용하면 하위 의존성 추가할때 버전을 귀찮게 맞춰야 하는 일을 덜 수 있다. 추가적으로 편의를 위해 lombok 을 의존성에 넣었다.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cothe</groupId>
<artifactId>springConfigurer</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
SpringbootConfigApplication.java
package cothe;
@EnableConfigurationProperties // 스프링에게 설정정보를 @ConfigurationProperties 가 붙은 POJO 에 매핑하라고 알려줌
@SpringBootApplication
@Slf4j
public class SpringbootConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootConfigApplication.class);
}
@Autowired
public SpringbootConfigApplication(ConfigurationProjectProperties cp){
log.info("configurationProjectProperties.projectName = {}", cp.getProjectName());
}
}
@Component // configuration 으로 시작하는 설정값은 @ConfigurationProperties("configuration") 이 붙은 빈에 매핑됨
@ConfigurationProperties("configuration")
@Getter
@Setter
class ConfigurationProjectProperties{
private String projectName; // configuration.projectName 으로 지정된 설정값이 할당 됨
}
src/main/resources/
에 application.yml
파일을 추가해서 아래 내용을 넣는다.
configuration:
projectName: Spring Boot Project
애플리케이션을 실행하면 새로 추가한 설정파일 정보가 POJO 객체에 매핑된 것을 확인 할 수 있다.
요약해보면 @EnableConfigurationProperties
애노테이션을 붙여서 스프링에게 설정정보를 매핑할 수 있도록 준비 시킨다. 매핑될 클래스는 @ConfigurationProperties
애노테이션으로 지정하는데 이에 대한 값으로 prefix 값을 줄 수 있다. 이 prefix와 일치하는 설정 중 POJO 클래스에 매핑 가능한 필드를 찾아서 매핑한다.
Subscribe via RSS