스프링 부트 YAML 예제

27177 단어 springspringboot
즉, src/resources 폴더에 application.yml을 생성하면 Spring Boot는 .yml 파일을 자동으로 로드 및 구문 분석하고 값을 @ConfigurationProperties 주석이 달린 클래스에 바인딩합니다. @ConfigurationProperties 주석을 사용하면 구성 파일(application.properties 또는 application.yml)에 설정된 속성에 자동으로 강력하게 액세스할 수 있습니다.

YAML 및 속성


  • application.yml

  • logging:
      level:
        org.springframework: ERROR
        com.example: DEBUG
    
    spring:
      profiles:
        active: dev
      main:
        banner-mode: off
    
    email: [email protected]
    thread-pool: 10
    
    wordpress:
      menus:
        - title: Home
          name: Home
          path: /
        - title: About
          name: About
          path: /about
      themes:
        default-folder: /wp-content/themes/toptech
      servers:
        - ip: 127.0.0.1
          path: /dev1
        - ip: 127.0.0.2
          path: /dev2
        - ip: 127.0.0.3
          path: /dev3
    


  • application.properties

  • # Spring Boot
    logging.level.org.springframework=ERROR
    logging.level.com.mkyong=DEBUG
    spring.profiles.active=dev
    spring.main.banner-mode=off
    
    # Global
    email=[email protected]
    thread-pool=10
    
    # WordPress
    wordpress.menus[0].title=Home
    wordpress.menus[0].name=Home
    wordpress.menus[0].path=/
    wordpress.menus[1].title=About
    wordpress.menus[1].name=About
    wordpress.menus[1].path=/about
    wordpress.themes.default-folder=/wp-content/themes/toptech
    wordpress.servers[0].ip=127.0.0.1
    wordpress.servers[0].path=/dev1
    wordpress.servers[1].ip=127.0.0.2
    wordpress.servers[1].path=/dev2
    wordpress.servers[2].ip=127.0.0.3
    wordpress.servers[2].path=/dev3
    


    프로젝트 구조





    프로젝트 종속성



    Spring Boot는 SnakeYAML 라이브러리를 사용하여 YAML 파일을 구문 분석하고 SnakeYAML 라이브러리는 spring-boot-starter에서 제공합니다.

    라이브러리 및 종속성은 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>
    
        <artifactId>spring-boot-yaml-example</artifactId>
        <packaging>jar</packaging>
        <name>Spring Boot YAML Example</name>
        <url>https://www.mkyong.com</url>
        <version>1.0</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.2.RELEASE</version>
        </parent>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.0</version>
                </plugin>
    
            </plugins>
        </build>
    </project>
    


    스프링 부트 + YAML



    Spring Boot는 YAML 파일을 로드 및 구문 분석하고 다음 @ConfigurationProperties 클래스의 값을 바인딩합니다.
  • 메뉴.자바

  • package com.example.yaml.config.model;
    
    public class Menu {
        private String name;
        private String path;
        private String title;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPath() {
            return path;
        }
    
        public void setPath(String path) {
            this.path = path;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        @Override
        public String toString() {
            return "Menu{" +
                    "name='" + name + '\'' +
                    ", path='" + path + '\'' +
                    ", title='" + title + '\'' +
                    '}';
        }
    }
    


  • 서버.자바

  • package com.example.yaml.config.model;
    
    public class Server {
        private String ip;
        private String path;
        public String getIp() {
            return ip;
        }
    
        public void setIp(String ip) {
            this.ip = ip;
        }
    
        public String getPath() {
            return path;
        }
    
        public void setPath(String path) {
            this.path = path;
        }
    
        @Override
        public String toString() {
            return "Server{" +
                    "ip='" + ip + '\'' +
                    ", path='" + path + '\'' +
                    '}';
        }
    }
    


  • Theme.java

  • package com.example.yaml.config.model;
    
    public class Theme {
        private String defaultFolder;
        public String getDefaultFolder() {
            return defaultFolder;
        }
    
        public void setDefaultFolder(String defaultFolder) {
            this.defaultFolder = defaultFolder;
        }
    
        @Override
        public String toString() {
            return "Theme{" +
                    "defaultFolder='" + defaultFolder + '\'' +
                    '}';
        }
    }
    


  • GlobalProperties.java

  • package com.example.yaml.config;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties
    public class GlobalProperties {
        private int threadPool;
        private String email;
        public int getThreadPool() {
            return threadPool;
        }
    
        public void setThreadPool(int threadPool) {
            this.threadPool = threadPool;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "GlobalProperties{" +
                    "threadPool=" + threadPool +
                    ", email='" + email + '\'' +
                    '}';
        }
    }
    


    setter(및 getter) 이름은 application.properties(또는 application.yml)의 속성 이름과 일치해야 합니다.




  • WordPressProperties.java

  • package com.example.yaml.config;
    
    import com.example.yaml.config.model.Menu;
    import com.example.yaml.config.model.Server;
    import com.example.yaml.config.model.Theme;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Component
    @ConfigurationProperties("wordpress")
    public class WordPressProperties {
    
        private List<Menu> menus = new ArrayList<>();
        private Theme themes;
        private List<Server> servers = new ArrayList<>();
        public List<Menu> getMenus() {
            return menus;
        }
    
        public void setMenus(List<Menu> menus) {
            this.menus = menus;
        }
    
        public Theme getThemes() {
            return themes;
        }
    
        public void setThemes(Theme themes) {
            this.themes = themes;
        }
    
        public List<Server> getServers() {
            return servers;
        }
    
        public void setServers(List<Server> servers) {
            this.servers = servers;
        }
    
        @Override
        public String toString() {
            return "WordpressProperties{" +
                    "menus=" + menus +
                    ", themes=" + themes +
                    ", servers=" + servers +
                    '}';
        }
    }
    
    


    Spring은 자동으로 wordpress 접두어가 붙은 application.properties 또는 application.yml 내부에 배치된 속성을 찾아 WordPressProperties 클래스의 해당 속성에 주입합니다.

    Spring Boot를 정상적으로 시작하고 값을 출력합니다.



    데모






    소스 코드



    https://github.com/java-cake/spring-boot/tree/main/yaml

    좋은 웹페이지 즐겨찾기