Spring Boot项目的配置文件有哪些?加载优先级谁最高?配置优先级谁最高?
目录一. 结论二. .prperties、.yml、.yaml 文件类型简介及注意点2.1 文件简介2.2. .prperties默认格式/传统格式2.3 application.yml主流格式2.4 application.yaml主流格式2.5 配置文件注意事项三. bootstrap.properties、bootstrap.yml、bootstrap.yaml 文件四. 特殊配置文件 application-{profile}.properties、application-{profile}.properties一. 结论结论一:spring boot项目中共有三大类配置文件(也可以说是两大类)第一类以 properties 结尾的配置文件例如 bootstrap.properties、bootstrap.properties第二类以 yml 结尾的配置文件例如 bootstrap.application、application.yml第三类以 yaml 结尾的配置文件例如 bootstrap.application、application.yaml其实yml文件和yaml文件没有本质区别它们都是YAML Aint Markup Language格式的一种文件扩展名的缩写只是有些人习惯写成 .yml 后缀而有些人习惯写成 .yaml 后缀而且在一个项目中几乎很少会有 yml 文件和 yaml 文件共存都是使用同一种所以我们下面就将它们归于一类。结论二bootstrap.properties/yml 文件的加载顺序最高通常为系统级别参数而application.properties/yml 通常为应用级配置是有可能会变的bootstrap的配置先于application的配置加载同时.properties的加载又先于.yml的加载所以配置文件加载顺序为 bootstrap.properties bpptstrap.yml application.properties application.yml结论三 多个配置文件共存时对于相同属性配置优先级为 application.properties application.yml bootstrap.yml bootstrap.properties对于不同属性时配置优先级为 bootstrap.properties bpptstrap.yml application.properties application.yml 与加载优先级一致结论四同覆盖不同加多个配置文件的属性会呈现相加都生效的效果但如果遇到同种配置则配置优先级高的配置文件会覆盖配置优先级低的配置文件例子1一个项目中配置文件 application.yaml 配置项目端口为8080application.yml配置端口为8081application.properties文件配置端口为8082启动项目后项目实际运行端口为8082。所以项目实际运行后运行端口为8082例子2再比如application.yaml 配置 mybatis 框架会略大小写驼峰转换application.yml 设置 Redis 地址和端口为127.0.0.1:6389application.properties 配置 MySQL 用户名密码为root和123456那么最后这三种配置都会在项目中生效因为它们不是同属性配置可以叠加。二. .prperties、.yml、.yaml 文件类型简介及注意点2.1 文件简介Spring Boot 项目最大的优点就是简化了原本 Spring 项目繁重的配置熟悉Spring Boot项目的小伙伴们应该都听过一句话约定大于配置即约定的优先级要高于配置。在Spring boot项目中我们做配置只需要使用配置文件即可配置文件主要有 application.properties、application.yml、application.yaml三种文件三种文件的优先级为application.properties application.yml application.yaml通常配置在项目的 resource 文件夹下正常生效的配置文件前面会有一个绿色的树叶logo如果没有则说明该文件并没有被项目识别为配置文件里面的配置也是不生效的。2.2. .prperties默认格式/传统格式properties配置文件格如下所示格式简单但是只支持键值对。即属性值配置值。此外可以看出properties 文件属性配置是无序的但有一些属性是需要有先后顺序的在一些需要路径匹配的配置中顺序就显得尤为重要。开发人员很有可能会不小心出现属性顺序配置错误的失误。因此就有了我们现在最为常用的主流模式 yml/yaml文件。2.3 application.yml主流格式如下图可以看出在 yml 文件中属性的配置层级非常明显简单清晰并且消除了properties文件中需要配置属性前缀造成的冗余简洁美观。例如spring 和 mybatis 是同一级别的所以二者就隔绝开而 datasource 则是在 spring 的下一级直接在 datasource 后面敲回车换行配置子属性而 datasource 下还有用户名和密码等子属性再敲回车换行配置这样就防止了开发人员在配置属性顺序是的失误。可读性强冗余小是现在极为主流的配置文件2.4 application.yaml主流格式和 yml 文件一样只不过由于各程序猿或者架构师习惯写成 yaml 后缀语法和 yml 文件完全一样用法也一样一般在项目中很少同时出现 yml 和 yaml 都是使用其中一种后缀名的文件如果同时出现yaml 的读取优先级要高于 项目启动时会先读取 yaml 配置文件再读取 yml 配置文件。2.5 配置文件注意事项1在使用 properties 配置文件时要注意有些属性配置顺序有先后要求2在使用 yml/yaml 配置文件时要注意给属性配置属性值时前要空一个空格如下图所示黄色划线区域其实都是有一个空格的如果没有空格会报错3有些版本的 spring boot 在识别 properties 或 yml/yaml 配置文件时不允许里面包含注解如果有注解或解析失败小伙伴们要注意一下哦三. bootstrap.properties、bootstrap.yml、bootstrap.yaml 文件上面这三种文件可以说是所有配置文件中加载优先级最高的文件了项目在启动初期会最优先加载此文件里面通常都是一些项目的通用配置例如微服务中的服务注册中心和配置中心公用Redis服务器IP端口服务器网关各种设置等等。在 bootstrap 文件中配置过的属性由于都是项目的通用属性设置所以在各个微服务子模块中通常就不会再去做配置。总之记住一句话bootstrap.properties/yml 文件最优先加载通常为系统级别参数配置固定参数基本不会更改而 application.properties/yml 文件后加载通常配置应用级别参数可能会更改。四. 特殊配置文件 application-{profile}.properties、application-{profile}.properties在一些大型项目中或者我们进行公司接触真正的项目之后通常会发现一个项目中除了上面的集中文件外还会出现 application-dev.propertiesapplication-prod.propertiesapplication-dev.ymlapplication-prod.yml 等文件如下图所示这种文件的读取顺序比是相对来说最低的一层。简单来说一个项目有研发阶段测试阶段生产阶段每个阶段的配置文件肯定多多少偏少都是有一点不同的比如服务器地址端口等... 那么我们该如何进行丝滑的切换呢就是通过在 application.properties 或 application.yml 文件中进行设置二者均可设置。在 yml 文件中如下图所示设置 spring 子属性 profiles 值 active为 local那么项目在加载完 application.yml 文件之后就会再去加载 application-local.yml 文件在 application.properties 文件中也是一样的通过键值对的方式即可spring.profiles.activelocal即可在项目读取 application.properties 文件后再去读取 application-local。properties 配置文件就是通过这些带有 -dev(开发使用的配置文件)、-prod(项目发布生产的配置文件)以及其它公司内部的各种环境。