외부설정
프로퍼티를 설정하는 방법은 매우 다양하며 우선순위에 따라 값이 설정된다.
프로퍼티 우선 순위
-
유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
-
테스트에 있는 @TestPropertySource
-
@SpringBootTest 애노테이션의 properties 애트리뷰트
-
커맨드 라인 아규먼트
-
SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티
-
ServletConfig 파라미터
-
ServletContext 파라미터
-
java:comp/env JNDI 애트리뷰트
-
System.getProperties() 자바 시스템 프로퍼티
-
OS 환경 변수
-
RandomValuePropertySource
-
JAR 밖에 있는 특정 프로파일용 application properties
-
JAR 안에 있는 특정 프로파일용 application properties
-
JAR 밖에 있는 application properties
-
JAR 안에 있는 application properties
-
@PropertySource
-
기본 프로퍼티 (SpringApplication.setDefaultProperties)
프로퍼티의 우선순위는 다음과 같다. application.properties는 15위인것을 볼 수 있다.
테스트를 실행하면 main을 먼저 실행 후 test가 오버라이딩 하기 때문에
test에 있는 값들이 최종적으로 사용된다.
따라서 main과 test에 각각 application.properties가 있다면 test에 있는 application.properties가 사용된다.
@SpringBootTest
SpringBootTest 어노테이션을 이용하여 우선순위를 높일 수 있다.
@TestPropertySource
다음은 TestPropertySource를 이용한 방법이다.
다음과 같이 test.properties를 따로 생성할 수도 있다.
application.properties 우선 순위
-
file:./config/
-
file:./
-
classpath:/config/
-
classpath:/
application.properties 위치에 따른 우선순위는 다음과 같다.
@ConfigurationProperties
다음과 같은 프로퍼티값을 하나의 빈으로 받을 수 있다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
우선 pom.xml에 등록해준다.
ConfigurationProperties를 설정해주고 빈으로 등록한다.
다음과 같이 Autowired로 빈을 받아 사용할 수 있다.
@Value를 이용하는 방법보다 융통성있게 바인딩을 할 수 있다.
키 이름에 _ (언더스코어) 또는 - (케밥)이 포함되어 있어도 camlecase 로 바인딩 된다.
@Validated 를 이용하여 유효성 검사도 가능하다.
'Study > Spring boot' 카테고리의 다른 글
[Spring Boot] 로깅 (0) | 2020.12.14 |
---|---|
[Spring Boot] 프로파일 (0) | 2020.12.14 |
[Spring Boot] SpringApplication (0) | 2020.12.12 |
[Spring Boot] 자동 설정 (0) | 2020.12.07 |
[Spring Boot] 스프링 부트 프로젝트 생성 (0) | 2020.12.06 |