spring-boot学习二:Spring boot配置相关内容

1.配置文件

1.1简单介绍

spring boot默认会使用一个全局的配置文件,这个配置文件可以是两种格式的文件,一种是.properties,一种是.yaml格式的文件;并且配置文件的名字是固定的,要么是application.properties,要么是application.yaml;

配置文件的作用:修改 Spring Boot配置的默认值,例如端口号等信息;

1.2YAML语法简介

1.2.1简介

YAML:(YAML Ain't  Markup Lanuage),这个叫法有两层含义:

YAML A Markup Lanuage:YAML就是一个标记语言;

YAML isn't Markup Lanuage:YAMA不是一个标记语言;

YAML以数据为中心,比json.xml更适合做配置文件;

比如我们想改变spring boot 启动的端口信息,我们在application.properties文件中的语法如下所示:

server.port=8971

但是在application.yaml文件中的语法如下所示:

server:
  port: 8089

当然如果同样的工作我们在XML文件中进行配置,语法如下:

<server>
<port>8089</port>
</server>

 1.2.2具体语法

【1】k:(空格)v:表示一对键值对(空格必须有),以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级的; 

server:
  port: 8089
  error:
    path: /hello

其中server为第一层级,port和error属于同一个层级,path单独属于一个层级;

还需要注意的是,yaml文件中的属性和值大小写敏感;

【2】值的写法

即在yaml文件中都可以写入哪些值,我们常见的值类型如下:

第一类:字面量,普通的值(数字、字符串、布尔)

             k: v:字面直接来写,尤其对于字符串类型不需要加入双引号,如果加上双引号有特殊含义,会将字符串中的特殊字符进行专义输出,例如输出"ab \n c",输出:  

ab
c

如果加的是单引号,那么特殊字符将会被原样输出,例如:'ab \n c' 输出就是:

ab \n c

第二类:对象、map(属性和值)(键值对);

   k: v:在下一行来写对象的属性和值的关系,注意缩进;例如我们现在有个类User,里面有属性name和age写法如下:

user:
    name: haige
    age: 20

  上述的写法还等价于下面这种行内写法:

User{name: haige,age: 20}

第三类:集合数组(List、Set);

   用-值表示数组中的一个元素,例如下面有个集合pets,里面有集合原素:pig、dog、cat写法如下:

pets:
    -pig
    -dog
    -cat

述的写法还等价于下面这种行内写法:

pets: [pig,cat,dog]

 1.3从YAML配置文件注入属性值

既然YAML配置文件这么方便,那我们需要学会从YAML文件中读取属性。下面通过一个实例进行演示;

具体步骤如下所示:

【1】第一步:声明一个类Person,里面有属性name、age、map集合、list集合,对象等属性;

package com.hai.bao.springboot01;

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

/**
 * @author :haibao.wang
 * @date :Created in 2019/8/29 22:20
 * @description:person类
 * @modified By:
 * @version: $
 */
public class Person {
    private String name;
    private int age;
    private boolean boss;
    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 int getAge() {
        return age;
    }

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

    public boolean isBoss() {
        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;
    }

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

在Person类里面有一个Dog类的属性,Dog类如下:

package com.hai.bao.springboot01;

/**
 * @author :haibao.wang
 * @date :Created in 2019/8/29 22:23
 * @description:新建一个小狗类
 * @modified By:
 * @version: $
 */
public class Dog {
    private String dogName;
    private int dogAge;

    public String getDogName() {
        return dogName;
    }

    public void setDogName(String dogName) {
        this.dogName = dogName;
    }

    public int getDogAge() {
        return dogAge;
    }

    public void setDogAge(int dogAge) {
        this.dogAge = dogAge;
    }
}

【2】在application.yaml文件中配置Person类中相关属性的值;

 
 
server:
port: 8089
person:
name: 海哥
age: 18
boss: true
birth: 1990/05/27
maps:
key01: 化学
key02: 物理
lists:
- 跑步
- 游泳
dog:
dogName: 旺财
dogAge: 3

 

 【3】此时在Person类中有提示信息:

 此时需要在pom.xml文件中添加配置文件处理器,如下依赖;

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

 【4】给Person类加上@ConfigurationProperties(prefix = "Person")注解。告诉Spring  boot将本类中的所有属性和配置文件中的配置信息一一绑定;

 

 【5】给Person类加上容器的注解,确保组件在容器中,才能够使用@ConfigurationProperties注解;

 

 【6】启动Spring boot服务;

【7】写一个Spring  boot的单元测试类,来验证下功能:

package com.hai.bao;

import com.hai.bao.springboot01.Person;
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 BaoApplicationTests {
    @Autowired
    Person person;

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

}

代码运行结果如下:

1.4在.properties文件中去配置Person类的相关属性;

#配置Person类中相关的属性值
person.age=10
person.birth=1990/05/01
person.boss=true
person.maps.key01=数学
person.maps.key02=化学
person.lists=瑜伽,游泳
person.dog.dogName=旺财
person.dog.dogAge=2

 启动后执行单元测试,测试结果如下:

 有乱码,因为IDEA原生的编码格式为utf-8,解决乱码问题的方法如下:

File-settings-File Encodings

 

猜你喜欢

转载自www.cnblogs.com/haibaowang/p/11426980.html