24.7 속성대신 yaml 사용하기 - 다시

YAML 은 JSON의 상위 집합이며, 따라서 계층 적 구성 데이터를 지정하는 데 편리한 형식입니다. 이 SpringApplication클래스는 classpath에 SnakeYAML 라이브러리가 있을 때마다 자동으로 YAML을 속성의 대안으로 지원합니다 .

"Starters"를 사용하면 spring-boot-starter의해 snakeYAML이 자동으로 제공됩니다.

24.7.1 YAML로드

Spring Framework는 YAML 문서를로드하는 데 사용할 수있는 두 가지 편리한 클래스를 제공합니다. YamlPropertiesFactoryBean로드 YAML로 Properties하고, YamlMapFactoryBean A와 부하 YAML Map.

예를 들어 다음 YAML 문서를 생각해보십시오.

environments:
	dev:
		url: https://dev.example.com
		name: Developer Setup
	prod:
		url: https://another.example.com
		name: My Cool App

앞의 예는 다음 속성으로 변환됩니다.

environments.dev.url=https://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=https://another.example.com
environments.prod.name=My Cool App

YAML리스트는 [index]역 참조 자 (dereferencers)가있는 등록 정보 키로 표시됩니다 . 예를 들어, 다음 YAML을 고려하십시오.

내 :
 서버 : 
	- dev.example.com 
	- another.example.com

앞의 예는 다음 속성으로 변환됩니다.

my.servers [0] = dev.example.com
 my.servers [1] = another.example.com

Spring Boot의 Binder유틸리티 를 사용하여 속성을 바인드하려면 (또는 ) 어떤 @ConfigurationProperties타입의 타겟 빈에서 프라퍼티를 가질 필요가있다. 그리고 setter를 제공하거나 변경 가능한 값으로 초기화해야한다. 예를 들어 다음 예제는 이전에 표시된 속성에 바인딩합니다.java.util.ListSet

@ConfigurationProperties (접두사 = "my")
 public  class Config { 개인 목록 <String> 서버 = 새 ArrayList <String> (); 공용 목록 <String> getServers () {
		 이 .servers 반환 ; 
	}
}

	

24.7.2 Spring 환경에서 YAML을 속성으로 노출시키기

YamlPropertySourceLoader클래스는 같은 YAML을 노출하는 데 사용할 수있는 PropertySource봄에서 Environment. 이렇게하면 @Value자리 표시 자 구문을 사용하여 주석 을 사용하여 YAML 속성에 액세스 할 수 있습니다.

24.7.3 다중 프로필 YAML 문서

spring.profiles다음 예제와 같이 문서 적용시기를 나타내는 키를 사용하여 단일 파일에 여러 프로필 관련 YAML 문서를 지정할 수 있습니다 .

서버 :
 	주소 : 192.168 . 1.100 
--- 
spring :
 	프로파일 : 개발
 서버 :
 	주소 : 127.0 . 0.1 
--- 
봄 :
 	프로필 : 생산 및 eu-central
 서버 :
 	주소 : 192.168 . 1.120

앞의 예에서 development프로필이 활성이면 server.address 속성은 127.0.0.1입니다. 마찬가지로 production and 및 eu-central profiles이 활성 인 경우 server.address속성은 192.168.1.120입니다. 는 IF development, productioneu-central프로필이되어 있지 활성화, 속성에 대한 다음 값입니다 192.168.1.100.

spring.profiles따라서 간단한 프로필 이름 (예 production:) 또는 프로필 식을 포함 할 수 있습니다 . 프로파일 표현식은보다 복잡한 프로파일 로직이 표현되도록합니다 production & (eu-central | eu-west). 자세한 내용 은 참조 가이드 를 확인하십시오.

응용 프로그램 컨텍스트가 시작될 때 명시 적으로 활성화 된 것이 없으면 기본 프로파일이 활성화됩니다. 따라서 다음 YAML에서는 "기본"프로필 에서만spring.security.user.password 사용할 수 있는 값을 설정 합니다.

서버 :
   포트 : 8000 
--- 
스프링 :
   프로파일 : 기본
   보안 :
     사용자 :
       암호 : 약함

다음 예제에서 암호는 프로파일에 연결되지 않았기 때문에 항상 설정되며 필요에 따라 다른 모든 프로파일에서 명시 적으로 재설정해야합니다.

서버 :
   포트 : 8000 
스프링 :
   보안 :
     사용자 :
       암호 : 약함

spring.profiles요소 를 사용하여 지정된 스프링 프로파일 은 !문자 를 사용하여 선택적으로 무효화 될 수 있습니다 . 단일 문서에 대해 음수 및 음화가 아닌 프로파일이 모두 지정되면 음수가 아닌 하나 이상의 프로파일이 일치해야하며 음수 프로파일이 일치하지 않아야합니다.

24.7.4 YAML 결점

YAML 파일은 @PropertySource주석 을 사용하여로드 할 수 없습니다 . 그런 식으로 값을로드해야하는 경우 속성 파일을 사용해야합니다.

프로필 관련 YAML 파일에서 다중 YAML 문서 구문을 사용하면 예기치 않은 동작이 발생할 수 있습니다. 예를 들어 프로파일이 활성화 된 application-dev.yml상태에서 호출 된 파일에서 다음 구성을 고려하십시오 dev.

서버 :
   포트 : 8000 
--- 
스프링 :
   프로파일 :! 테스트
   보안 :
     사용자 :
       비밀번호 : 약함

위의 예에서 프로필 부정 및 프로필 식은 예상대로 작동하지 않습니다. 프로필 별 YAML 파일과 여러 YAML 문서를 결합하지 말고 하나만 사용하는 것이 좋습니다.

Last updated