1. 개요

Spring 애플리케이션을 구성하는 방법 중 하나는 YAML 구성 파일을 사용하는 것입니다.

이 빠른 기사에서는 YAML을 사용하여 간단한 Spring Boot 애플리케이션에 대해 서로 다른 Profile을 구성합니다.

2. Spring YAML 파일

Spring 프로파일은 Spring 애플리케이션이 다른 환경에 대해 다른 속성을 정의 할 수 있도록 도와줍니다.

다음은 두 개의 Profile이 포함 된 간단한 YAML 파일입니다. 두 프로필을 구분하는 세 개의 대시는 새 문서의 시작을 나타내므로 모든 Profile을 동일한 YAML 파일에 설명 할 수 있습니다.

application.yml 파일 의 상대 경로 /myApplication/src/main/resources/application.yml입니다.

spring:
    config:
        activate:
            on-profile: test
name: test-YAML
environment: testing
enabled: false
servers: 
    - www.abc.test.com
    - www.xyz.test.com

---
spring:
    config:
        activate:
            on-profile: prod
name: prod-YAML
environment: production
enabled: true
servers: 
    - www.abc.com
    - www.xyz.com

이 설정은 응용 프로그램을 시작할 때 이러한 프로필이 활성화된다는 것을 의미하지 않으며, 프로필 별 문서에 정의 된 속성은 명시 적으로 지정하지 않는 한로드되지 않습니다. 기본적으로 유일한 활성 프로필은 ' default '입니다.

3. 구성 클래스에 YAML 바인딩

속성 파일에서 관련 속성 집합을로드하기 위해 빈 클래스를 만듭니다.

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {
 
    private String name;
    private String environment;
    private boolean enabled;
    private List<String> servers = new ArrayList<>();

    // standard getters and setters

}

여기에 사용 된 어노테이션은 다음과 같습니다.

  • @Configuration 은 클래스를 빈 정의의 소스로 표시합니다.
  • @ConfigurationProperties 는 외부 구성을 구성 클래스에 바인딩하고 유효성을 검사합니다.
  • @EnableConfigurationProperties 이 어노테이션은Spring 애플리케이션에서 @ConfigurationProperties 어노테이션이 달린 Bean을 활성화하는 데 사용됩니다.

4. YAML 속성 액세스

YAML 속성에 액세스하기 위해 YAMLConfig 클래스 의 개체를 만들고 해당 개체를 사용하여 속성에 액세스합니다.

속성 파일에서 spring.profiles.active 환경 변수를 prod로 설정해 보겠습니다 . 우리가이 속성을 정의하지 않으면 , 단지 '기본' 프로파일이 활성화됩니다.

특성 파일의 상대 경로는 /myApplication/src/main/resources/application.properties입니다.

spring.profiles.active=prod

이 예에서는 CommandLineRunner를 사용하여 속성을 표시합니다 .

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private YAMLConfig myConfig;

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.run();
    }

    public void run(String... args) throws Exception {
        System.out.println("using environment: " + myConfig.getEnvironment());
        System.out.println("name: " + myConfig.getName());
        System.out.println("enabled:" + myConfig.isEnabled());
        System.out.println("servers: " + myConfig.getServers());
    }
}

명령 줄의 출력 :

using environment: production
name: prod-YAML
enabled: true
servers: [www.abc.com, www.xyz.com]

5. YAML 속성 재정의

Spring Boot에서 YAML 파일은 다른 YAML 속성 파일에 의해 재정의 될 수 있습니다.

버전 2.4.0 이전에는 YAML 속성이 다음 위치의 속성 파일에 의해 우선 순위가 가장 높은 순서로 재정의되었습니다.

  • 패키지 된 jar 외부에 배치 된 프로필의 속성
  • 패키징 된 jar 안에 패키징 된 프로필의 속성
  • 패키지 된 jar 외부에 배치 된 애플리케이션 속성
  • 패키지 된 jar 안에 패키지 된 애플리케이션 속성

Spring Boot 2.4부터 외부 파일은 프로필 특정 여부에 관계없이 항상 패키지 파일을 재정의합니다.

6. 결론

이 빠른 기사에서는 YAML을 사용하여 Spring Boot 애플리케이션에서 속성을 구성하는 방법을 살펴 보았습니다. 우리는 또한 YAML 파일에 대한 Spring Boot가 따르는 속성 재정의 규칙을 보았습니다.

이 기사 의 코드는 GitHub에서 사용할 수 있습니다.