Рубрики
Без рубрики

Пример YAML с пружинной загрузкой

– Пример YAML с пружинной загрузкой

Автор оригинала: mkyong.

В этой статье мы покажем вам, как использовать YAML вместо файла свойств в весенней загрузке.

Протестировано с:

  • Пружинный ботинок 2.1.2.ВЫПУСК
  • Мавен 3
  • Змеиный ям:банка:1.23

Короче говоря, создайте application.yml в папке src/resources , загрузится и проанализируется Spring Boot .yml файл автоматически и привязывает значения к классам, которые помечены @ConfigurationProperties

P.S Файлы YAML не могут быть загружены с помощью “@PropertySource”

1. YAML и свойства

logging:
  level:
    org.springframework: ERROR
    com.mkyong: DEBUG

spring:
  profiles:
    active: dev
  main:
    banner-mode: off

email: yaml@mkyong.com
thread-pool: 10

wordpress:
  menus:
    - title: Home
      name: Home
      path: /
    - title: About
      name: About
      path: /about
  themes:
    default-folder: /wp-content/themes/mkyong
  servers:
    - ip: 127.0.0.1
      path: /dev1
    - ip: 127.0.0.2
      path: /dev2
    - ip: 127.0.0.3
      path: /dev3
# Spring Boot
logging.level.org.springframework=ERROR
logging.level.com.mkyong=DEBUG
spring.profiles.active=dev
spring.main.banner-mode=off

# Global
email=properties@mkyong.com
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/mkyong
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

2. Структура проекта

3. Зависимость от проекта

Spring Boot использует библиотеку SnakeYaml для анализа файла YAML, а библиотека SnakeYaml предоставляется spring-boot-starter



    4.0.0

    spring-boot-yaml-example
    jar
    Spring Boot YAML Example
    https://www.mkyong.com
    1.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.2.RELEASE
    

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            

            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.22.0
            

        
    

Зависимости проекта:

+- org.springframework.boot:spring-boot-starter:jar:2.1.2.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot:jar:2.1.2.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-context:jar:5.1.4.RELEASE:compile
[INFO] |  |     +- org.springframework:spring-aop:jar:5.1.4.RELEASE:compile
[INFO] |  |     +- org.springframework:spring-beans:jar:5.1.4.RELEASE:compile
[INFO] |  |     \- org.springframework:spring-expression:jar:5.1.4.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.2.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.1.2.RELEASE:compile
[INFO] |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] |  |  |  \- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.11.1:compile
[INFO] |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.11.1:compile
[INFO] |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] |  +- org.springframework:spring-core:jar:5.1.4.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-jcl:jar:5.1.4.RELEASE:compile
[INFO] |  \- org.yaml:snakeyaml:jar:1.23:runtime <<------------- SnakeYAML

4. Пружинный ботинок + YAML

4.1 Spring Boot загрузит и проанализирует файл YAML и свяжет значения в следующих классах @ConfigurationProperties .

package com.mkyong.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties // no prefix, root level.
public class GlobalProperties {

    //thread-pool , relax binding
    private int threadPool;
    private String email;

    //... getters and setters, toString()
}
package com.mkyong.config;

import com.mkyong.config.model.Menu;
import com.mkyong.config.model.Server;
import com.mkyong.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 menus = new ArrayList<>();
    private Theme themes;
    private List servers = new ArrayList<>();

    //... getters and setters, toString()
}

4.2 Модель, ничего особенного, просто несколько стандартных классов.

package com.mkyong.config.model;

public class Menu {

    private String name;
    private String path;
    private String title;

    //... getters and setters, toString()
}
package com.mkyong.config.model;

public class Server {

    private String ip;
    private String path;

    //... getters and setters, toString()
}
package com.mkyong.config.model;

public class Theme {

    private String defaultFolder;

    //... getters and setters, toString()
}

4.3 Запустите обычную загрузку с пружиной и распечатайте значения.

package com.mkyong;

import com.mkyong.config.GlobalProperties;
import com.mkyong.config.WordpressProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private WordPressProperties wpProperties;

    @Autowired
    private GlobalProperties globalProperties;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) {
        System.out.println(globalProperties);
        System.out.println(wpProperties);
    }
}

5. ДЕМОНСТРАЦИЯ

Упакуйте и запустите его.

# run spring boot directly
$ mvn spring-boot:run

# or package and run it 
$ mvn package
$ java -jar target/spring-boot-yaml-example-1.0.jar

Выход

GlobalProperties{
	threadPool=10, 
	email='properties@mkyong.com'
}

WordpressProperties{
	menus=[
		Menu{name='Home', path='/', title='Home'}, 
		Menu{name='About', path='/about', title='About'}
	], 
	themes=Theme{defaultFolder='/wp-content/themes/mkyong'}, 
	servers=[
		Server{ip='127.0.0.1', path='/dev1'}, 
		Server{ip='127.0.0.2', path='/dev2'}, 
		Server{ip='127.0.0.3', path='/dev3'}
	]
}

Скачать Исходный Код

Рекомендации

Оригинал: “https://mkyong.com/spring-boot/spring-boot-yaml-example/”