Spring Boot中的yaml文件配置

在spring boot项目中用的最多的配置文件就是properties和yaml了,这两者是可以互用的,但是 YAML 配置是有序的,properties 配置是无序的 ,而且自定义的 YAML 目前暂时不支持使用注解直接注入到 Spring Boot 项目中 ,下面我们来看看怎么配置yaml文件

yaml文件的存放路径

1、项目根目录下的config目录中
2、项目根目录下
3、classpath下的config目录中
4、classpath目录下

四个位置中的application.yaml文件的优先级按照上面列出的顺序依次降低。即如果有同一个属性在四个文件中都出现了,以优先级高的为准。

创建spring boot项目

创建好后的项目,会有application.properties文件,我们可以将其删掉,新建一个application.yaml文件,如果同时存在application.properties和application.yaml文件,直接加载的是application.properties文件
在这里插入图片描述
创建好application.yaml文件后,我们来看看内容的定义

server:
  port: 8889  //需要空两格,然后写对应的属性,冒号后面再空一格,在接着写属性值
  servlet:
    context-path: /zhouym
redis:  //定义了一个redis
  port: 9999
  hosts:
    - 192.168.1.110 //属性下面有多个值,需要用-来分割,-后面需要空一格
    - 192.168.1.111
    - 192.168.1.112
    - 192.168.1.113
    - 192.168.1.114
    - 192.168.1.115
  studentList:
    - name: zhangsan
      hobby: 篮球
      age: 18
    - name: lisi
      hobby: 羽毛球
      age: 19
    - name: wangwu
      hobby: 排球
      age: 20

项目启动后,配置中的数组、对象等通过get和set方法将数据保存对应的数组或者对象中

package com.zhouym.yamldeml;

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

import java.util.List;

/**
 * 〈〉
 *
 * @author zhouym
 * @create 2019/8/6
 * @since 1.0.0
 */
@Component
@ConfigurationProperties("redis") //加载yaml配置文件中redis这个key中的所有value属性
public class HelloRedis {
    private Integer port;
    private List<String> hosts;//存放String类型
    private List<Student> studentList;//存放Student对象

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public List<String> getHosts() {
        return hosts;
    }

    public void setHosts(List<String> hosts) {
        this.hosts = hosts;
    }

    public List<Student> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<Student> studentList) {
        this.studentList = studentList;
    }

    @Override
    public String toString() {
        return "HelloRedis{" +
                "port=" + port +
                ", hosts=" + hosts +
                ", studentList=" + studentList +
                '}';
    }
}

Student类

package com.zhouym.yamldeml;


/**
 * 〈〉
 *
 * @author zhouym
 * @create 2019/8/6
 * @since 1.0.0
 */
public class Student {
    private String name;
    private String hobby;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", hobby='" + hobby + '\'' +
                ", age=" + age +
                '}';
    }
}

测试类

package com.zhouym.yamldeml;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class YamldemlApplicationTests {

    @Autowired
    HelloRedis redis;
    @Test
    public void contextLoads() {
        System.out.println(redis);
    }

}

我们启动看看
在这里插入图片描述

优缺点

不同于properties文件的无序,yaml配置是有序的,这一点在有些配置中是非常有用的,例如在Spring Cloud Zuul的配置中,当我们配置代理规则时,顺序就显得尤为重要了。当然yaml配置也不是万能的,例如,yaml配置目前不支持@PropertySource注解。

发布了207 篇原创文章 · 获赞 92 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览