SrpingBoot入门到入坟04-配置文件

SpringBoot使用一个全局的配置文件,名称是固定,作用就是修改SpringBoot自动配置的默认值。

  *application.properties

  *application.yml

先看看两者的写法,以修改默认端口为例:

application.properties:

 application.yml:

扫描二维码关注公众号,回复: 7876441 查看本文章

 当然如果同时修改那么生效的是properties:

但是接下来讲的是yml语法:

  YAML Ain't Markup Language;另一种标记语言,语法比较简单,一些规范如下:K:(空格) V;表示一对键值对,空格必须存在。

  ---使用缩进表示层级关系

  ---缩进时不允许使用Tab键,只允许使用空格

  ---大小写敏感

  ---缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  YAML支持三种数据结构:

  ---对象:键值对的集合

  ---数组:一组按次序排列的值

  ---字面量:单个的,不可再分的值

案列:

  定义一个Dog类

package com.lql.quick.vo;

/**
 * @author: lql
 * @date: 2019.11.16
 * Description:
 */
public class Dog {
    
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

再来定义一个Person类,定义一些需要的变量;

package com.lql.quick.vo;

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

/**
 * @author: lql
 * @date: 2019.11.16
 * Description:
 * Created with IntelliJ IDEA
 */
public class Person {

    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Dog dog;
    private Map<String,Object> maps;
    private List<Object> lists;

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

    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 Dog getDog() {
        return dog;
    }

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

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

在此之前在pom.xml文件中新增一个依赖:导入配置文件处理器,配置文件进行绑定就会有提示

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

接下来在yml文件中要表示出来:如下:

server:
  port: 8083


person:
    lastName: lql
    age: 17
    boss: false
    birth: 2002/1/1
    dog:
        name: tom
        age: 2
    maps:
        java: 1
        php: 2
        c: 3
    lists:
        - A
        - B
        - C

然后需要将配置文件的数据关联到Bean上,所以在Person上加上@ConfigurationProperties和@Component注解:

 然后启动启动类,在自带的Spring测试类中测试,

 在后控制台能顺利打印:

在.properties中的配置如下:(先注释掉yml)

person.age=18
person.birth=2011/1/12
person.boss=true
person.last-name=lql
person.dog.name=bob
person.dog.age=2
person.lists[0]=11
person.lists[1]=12
person.lists[2]=13
person.maps.java=1
person.maps.c=2
person.maps.php=3

测试结果也是可行的:

但是如果有中文则会出现乱码:

 解决办法也很简单,只需要设置一下就行,具体看图

 

 再次运行则没有问题了:

当然写完yml之后可以直接利用第三方转换成properties:反之也一样,都是可行的;

猜你喜欢

转载自www.cnblogs.com/-qilin/p/11872463.html