springboot|springboot配置文件详解

配置文件分类 SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件。分别如下:

  • properties格式
  • yml格式
  • yaml格式
举例:
  • application.properties(properties格式)
server.port=80

  • application.yml(yml格式)
server: port: 81

  • application.yaml(yaml格式)
server: port: 82

yml格式和yaml格式除了文件名后缀不一样,格式完全一样
总结 SpringBoot提供了3种配置文件的格式
  • properties(传统格式/默认格式)
  • yml(主流格式)
  • yaml
配置文件优先级 【springboot|springboot配置文件详解】举例:
  • application.properties(properties格式)
server.port=80

  • application.yml(yml格式)
server: port: 81

  • application.yaml(yaml格式)
server: port: 82

? 启动后发现目前的启动端口为80,把80对应的文件删除掉,然后再启动,现在端口又改成了81。现在我们就已经知道了3个文件的加载优先顺序是什么
application.properties>application.yml>application.yaml

? 最后我们把配置文件内容给修改一下
  • application.properties(properties格式)
server.port=80 spring.main.banner-mode=off

  • application.yml(yml格式)
server: port: 81 logging: level: root: debug

  • application.yaml(yaml格式)
server: port: 82

? 我们发现不仅端口生效了,最终显示80,同时其他两条配置也生效了,看来每个配置文件中的项都会生效,只不过如果多个配置文件中有相同类型的配置会优先级高的文件覆盖优先级的文件中的配置。如果配置项不同的话,那所有的配置项都会生效。
总结
  1. 配置文件间的加载优先级 properties(最高)> yml > yaml(最低)
  2. 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
yaml文件 YAML(YAML Ain’t Markup Language),一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。常见的文件扩展名有两种:
  • .yml格式(主流)
  • .yaml格式
    对于文件自身在书写时,具有严格的语法格式要求,具体如下:
  1. 大小写敏感
  2. 属性层级关系使用多行描述,每行结尾使用冒号结束
  3. 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  4. 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  5. #号 表示注释
核心的一条规则要记住,数据前面要加空格与冒号隔开
? 下面列出常见的数据书写格式
boolean: TRUE#TRUE,true,True,FALSE,false,False均可 float: 3.14#6.8523015e+5#支持科学计数法 int: 123#0b1010_0111_0100_1010_1110#支持二进制、八进制、十六进制 null: ~#使用~表示null string: HelloWorld#字符串可以直接书写 string2: "Hello World"#可以使用双引号包裹特殊字符 date: 2018-02-17#日期必须使用yyyy-MM-dd格式 datetime: 2018-02-17T15:02:31+08:00#时间和日期之间使用T连接,最后使用+代表时区

此外,yaml格式中也可以表示数组,在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
subject: - Java - 前端 - 大数据 enterprise: name: itcast age: 16 subject: - Java - 前端 - 大数据 likes: [王者荣耀,刺激战场]#数组书写缩略格式 users:#对象数组格式一 - name: Tom age: 4 - name: Jerry age: 5 users:#对象数组格式二 - name: Tom age: 4 - name: Jerry age: 5 users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式

总结
  1. yaml语法规则
    • 大小写敏感
    • 属性层级关系使用多行描述,每行结尾使用冒号结束
    • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
    • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
    • #号 表示注释
  2. 注意属性名冒号后面与数据之间有一个空格
  3. 字面值、对象数据格式、数组数据格式
yaml数据读取 对于yaml文件中的数据,其实你就可以想象成这就是一个小型的数据库,里面保存有若干数据,每个数据都有一个独立的名字,如果你想读取里面的数据,肯定是支持的,下面就介绍3种读取数据的方式
读取单一数据
? yaml中保存的单个数据,可以使用Spring中的注解直接读取,使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
springboot|springboot配置文件详解
文章图片

记得使用@Value注解时,要将该注入写在某一个指定的Spring管控的bean的属性名上方。现在就可以读取到对应的单一数据行了
总结
  1. 使用@Value配合SpEL读取单个数据
  2. 如果数据存在多层级,依次书写层级名称即可
读取全部数据
? SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中
springboot|springboot配置文件详解
文章图片

数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法时getProperties(String),参数填写属性名即可
总结
  1. 使用Environment对象封装全部配置信息
  2. 使用@Autowired自动装配数据到Environment对象中
读取对象数据
首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean使其在容器中,然后使用注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息。
springboot|springboot配置文件详解
文章图片

这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就封装到这个对象中。记得数据属性名要与对象的变量名一一对应啊,不然没法封装。其实以后如果你要定义一组数据自己使用,就可以先写一个对象,然后定义好属性,下面到配置中根据这个格式书写即可。
springboot|springboot配置文件详解
文章图片

总结
  1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
  2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

    推荐阅读