SpringBoot开发【配置】YAML配置文件和Properties配置文件的值获取

427 阅读4分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

上一篇我们了解了YAML的作用和它的基本的语法,这次我们来说一下YAML配置文件的获取,顺便也说一下Properties配置文件值的获取

YAML配置文件值的获取

我们先建立在包内建立一个Person.java文件,把我们想要的用的值敲进入

private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object>lists;
    private Dog dog;

这其中包含字符串、整数、布尔值、map、list,还有一个dog,所以我们要建立一个Dog文件

    private String name;
    private Integer age;

我们定义两个属性值

然后加入Getter and Setter方法和toString方法(这里说一下,被“private”的变量即被私有化的变量,其他类的文件就不能引用它。set和get是“public”共有的,也就是说这两个方法是可以被在其他类文件中使用的。外界想要改变已经“private”私有化的变量,必须要在其他类文件中给方法set一个参数,通过set变量来更改。get则是获取这个私有化的变量值。是定义了一个带返回类型的方法,这个返回类型就是已经被私有化变量的类型。toString()方法返回反映这个对象的字符串。因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”)

具体快捷操作是alt+insert,然后分别选择Getter and Setter和toString,选择全部变量,然后会自动导入代码

 @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + 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;
    }

然后我们在Person文件中也加入Getter and Setter和toString方法

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

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    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;
    }

之后我们把所有属性和配置文件中相关的配置进行绑定 这里我们要用到一个注释@ConfigurationProperties 在使用前,我们要先在pom文件中加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

同时,这个东西要能起作用,我们一定得把它放到容器中,只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties的功能

/**
 * 将配置文件中配置的没一个属性的值映射到这个组建中
 * @configurationproperties:告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix="person"配置文件中person下面的所有属性进行一一映射
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties的功能
 */
@Component
@ConfigurationProperties(prefix="person")
public class Person {

    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object>lists;
    private Dog dog;

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

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    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;
    }
}

然后运行一下 我们打开test下的程序,是一个springboot的单元测试,可以在测试期间类似于编码一样自动注入容器的功能 我们直接把person注入进来,然后在控制台输出一下person

/*
springboot单元测试
可以在测试期间类似于编码一样自动注入容器的功能
 */
@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person;

    @Test
    void contextLoads() {
        System.out.println(person);
    }

}

@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 完成之后我们来运行一下测试程序

运行结果

出现这样的结果,说明从配置文件中获得值就成功了

Properties配置文件值的获取

这个和YAML文件获取的方法相似,我们先编辑一下properties文件(注意需要把之前写的yml文件注释掉)

person.last-name=张三
person.age=20
person.boss=false
person.birth=2019/12/12
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=white
person.dog.age=10

我们直接运行测试文件

测试结果

这里我们发现值是传递出来了,但是出现了乱码情况

IDEA默认使用的是utf-8格式,然而properties文件之前用的都是ASCLL格式,所以这里我们需要修改一下 点file打开setting,搜索file enc,然后将底下的properties files改为utf-8,在后边的Transparent native-to-ascii conversion的框中打钩

测试结果

这次就没有问题了