Java第四十五天,SpringBoot框架系列,SpringBoot基础(四) 配置文件

1.SpringBoot 支持的配置文件

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置

SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件

2.YML 配置文件

(1)定义

YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入比传统的xml方式更加简洁。YML文件的扩展名可以使用.yml或者.yaml

(2)格式

1.普通
key: value

2.对象
object:
    key1: value1
    key2: value2
    ......

或

object: {key1: value1,key2: value2,......}

3.字符串集合
objects:
    - obj1
    - obj2
    ......

或

object: [obj1,obj2,......]

4.对象集合
objects:
    - obj1_lab1: value1
      obj1_lab2: value2
    - obj2_lab1: value1
      obj2_lab2: value2
    ......

或

object: [{lab1: value1,lab2: value2},{lab1: value1,lab2: value2},......]

5.Map(同对象)
objects:
    - obj1_key1: value1
      obj1_key2: value2
    - obj2_key1: value1
      obj2_key2: value2
    ......

或

object: [{key1: value1,key2: value2},{key1: value1,key2: value2},......]



// 语法类似于 python 利用缩进关系(空格)来代表层级关系

(3)举例

1.普通数据(注意,: 后面有空格)
name: [姓名]

2.对象
person:
    name: [姓名]
    age: [年龄]

    
3.对象
person: {name: [姓名],age: [年龄]}


规范
1.层级关系之间用 空格 隔开,至于几个空格,并没有严格要求,行业习惯用 tab 隔开
2.key 与 value 之间,需要在 : 后面加空格
3.配置文件如果存在相同配置 key 的话,会存在覆盖关系;因此可以利用自定义配置文件修改(覆盖)默认配置信息
4.无论哪个字段不要写成驼峰式,最好写成下划线式

3.读取配置文件中的信息

1.通过 @value 注解

@Value("${变量名}")
@Value("${对象名.变量名}")

2.使用注解@ConfigurationProperties映射

通过注解@ConfigurationProperties(prefix="配置文件中的key的对象")可以将配置文件中的配置自动与实体进行映射

(1)要求

  • 使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以
  • 添加映射器依赖(可有可无,但在配置 yml 配置文件的时候,会给出对应提示)
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

(2)举例

person-one:
  name: xiaohong
  age: 20
@RestController
@RequestMapping("/test")
@ConfigurationProperties(prefix = "person-one")
public class TestController {

    private String name;
    private String age;

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

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

    @RequestMapping("/name")
    public String say() {
        return name + ":" + age;
    }
}