Spring Boot的yml、properties配置文件自动注入详解

Spring Boot的yml、properties配置文件自动注入详解
1.pom.xml文件导入相关组件

<!-- 导入配置文件处理器,配置文件进行绑定j就会有提示 -->
<dependency>
    <groupId> org.springframework.boot </groupId>
    <artifactId> spring-boot-configuration-processor </artifactId>
    <optional> true </optional>
</dependency>

2.创建yml、properties配置文件
这边我们是使用IDEA快捷搭建SpringBoot项目,会自动生成一个application.properties配置文件。然后我们自己再新建一个application.yml、person.properties两个配置文件用于后续的功能实现及对比。新建配置文件
2.创建Person、Dog两个实体类,后续使用配置文件自动注入实体类的数据

  1. Person实体类
package com.cd.springboot02config.beanT;


import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author: Chendc
 * @Date: 2019/8/7 9:17
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    /**
     * 基本类型数据
     */
    private String name;
    private Integer age;
    private Boolean isMan;
    private Date birth;
    /**
     * 复杂类型数据
     */
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Boolean getMan() {
        return isMan;
    }

    public void setMan(Boolean man) {
        isMan = man;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", isMan=" + isMan +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}

  1. Dog实体类
package com.cd.springboot02config.beanT;

/**
 * @Author: Chendc
 * @Date: 2019/8/7 9:20
 */
public class Dog {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

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

3.实现配置文件自动注入需要用到的注解
@Component、@ConfigurationProperties、@Autowired、@PropertySource
在这里插入图片描述
3.编写配置文件需要注入的数据

  1. application.properties


#配置person的值
person.name=王五application
person.age=24
person.birth=2012/13/14
person.isMan=false
person.maps.k1=v1
person.maps.k2=v2
person.lists=a1,b2,c3
person.dog.name=dog
person.dog.age=2

2.application.yml

person:
   name: 张三yml
   age: 18
   isMan: true
   birth: 2012/12/12
   maps: {k1: v1,k2: v2}
   lists:
     - lisi
     - zhaoliu
   dog:
       name: 小狗
       age: 2

3.person.properties


#配置person的值
person.name=张飞person
person.age=24
person.birth=2012/13/14
person.isMan=false
person.maps.k1=v1
person.maps.k2=v2
person.lists=a1,b2,c3
person.dog.name=dog
person.dog.age=2

4.使用SpringBoot提供的单元测试类,进行测试
在这里插入图片描述

  1. 测试一:三个配置文件都存在Person数据,不去指明读取哪个配置文件,测试配置文件的优先级。
    测试结果:多个配置文件在同个目录下优先注入application.properties数据
    如图所示:在这里插入图片描述
    2.测试二:注释掉application.properties文件,测试application.yml和自定义.properties文件优先级。
    测试结果:application.yml大于自定义.properties文件的优先级
    如图所示:
    在这里插入图片描述
    3.测试三:使用@PropertySource(value = {“classpath:person.properties”})注解指定读取配置文件数据注入。
    如图所示:在这里插入图片描述
    以上就是一些简单的探索了,要是大家有啥高端玩法记得评论、私信我鸭,一起进步!

版权声明:本文为weixin_42289383原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。