Spring Boot 配置文件

Spring Boot 使用一个全局的全局的配置文件:两种格式

  • application.properties
  • application.yaml/application.yml

配置文件的作用:修改 Spring Boot 自动配置的默认值

  • 注意事项:application.yaml 格式支持 属性占位符,即 ${},但不支持 SpEL 表达式,即 #{}

配置文件的放置路径:按优先级从高到低排序

  • file:./config/:当前项目的根目录的 /config 子目录中;
  • file:./:当前项目的根目录中;
  • classpath:/config/:项目 resources 的 /config 子目录中;
  • classpath:/:项目 resources 目录中;

不同格式加载顺序:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files

  • 同一个目录下,同时存在 application.yml 和 application.properties 文件,默认先读取application.properties
  • 优先加载带 profile 的配置文件,application-{profile}.yaml 比 application.yaml 文件先加载
  • 同一个属性,在多个配置文件均配置,默认使用第一个读取的,后面读取的不覆盖前面读取的,即高优先级配置会覆盖低优先级配置
  • 可以通过配置 spring.config.location(application.yaml) 或 —spring.config.location(java启动参数) 来指定配置文件位置,用来改变默认配置

yaml 语法

yaml 基本语法:

  • 使用缩进标识层级关系
  • 缩进时不允许使用 tab 键,只允许使用空格
  • 缩进的空格数目不重要,只需要相同层级的元素左侧对齐即可
  • 大小写敏感
  • yaml 的文件开始行为 —- ,表示一个文件的开始

yaml 支持的三种数据结构:

  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面量:单个的、不可再分的值

yaml 示例:

  1. # 字面量,key: value
  2. # 字符串默认不用加上单引号或双引号
  3. # 当加上双引号时,不会转义里面的特殊字符,特殊字符会按原意进行表达,如 \n 会换行
  4. # 当加上单引号时,会转义特殊字符,特殊字符最终只是一个普通的字符串数据
  5. name: lisi
  6. # 对象、Map(属性和值):支持 k-v 嵌套方式 或者 行内写法
  7. # k-v嵌套
  8. user:
  9. name: lisi
  10. age: 18
  11. # 行内写法
  12. user: {name: lisi,age: 18}
  13. # 数组(List、Set):用 - value 表示数组中的一个元素,或者行内写法
  14. subjects:
  15. - math
  16. - Chinese
  17. - English
  18. subjects: [math,Chinese,English]