A. springboot配置文件总结
springboot 本身支持多种灵活的配置方式,为开发 springboot 程序带来了很大的灵活性和扩展性,但是同时由于太灵活,经常会导致明明配置了相关属性,却没有生效。
本文总结了 springboot 配置文件的原理以及多个配置文件生效的顺序。
springboot 配置文件支持灵活的路径,以及灵活的文件名,用一个变量表达式总结如下:
部分源码如下:
当满足上述变量表达式的配置文件有多个时,会有一个配置的优先级。假设
上面每个条件组合起来,则最多有配置文件如下,且顺序从上到下:
获取属性时,按从上到下的顺序遍历由上述文件生成的属性资源对象 PropertySource ,如果遇到匹配的key直接返回。
总结一下:就是如果同一个key的属性只出现一次,则直接取该值即可。如果同一个key的属性出现多次,则取顺序靠前的属性资源对象。另外其中每个文件都是可选的。
需要注意的一点是:如果在同一个 location 下配置了多个文件名一样的文件,则只会取一个,比如在 classpath:/ ,有如下两个文件 application.yml :
则只会根据 classloader 的 classpath 列表,选取第一个出现的文件。因为 springboot 加载配置文件时最底层是使用的下面的方法:
这两个方法只会获取 classloader 类的 ucp 属性里面第一个匹配到的值。如果对 springboot 自身的机制不满意,想获取所有的classpath:/路径下面的 applicaiton.yml 文件,可以使用下面的方法:
本文总结了 springboot 配置文件的原理以及多个配置文件生效的顺序。如果存在增加了配置文件或者在配置文件里面增加了属性却没有生效,可以参考上面的 springboot 配置文件表达式和配置文件生效顺序进行排查。
后面还会有一篇文章讨论基于 springboot 配置原理如何实现自定义的配置读取方式。
B. springboot的配置文件有哪几种
Spring Boot的配置文件主要有两种:properties文件和yaml文件。
1. properties文件:这是Spring Boot的默认配置文件格式,它采用的是键值对的形式存储配置信息,键值对之间通过等号“=”进行连接。比如:
arino
server.port=8080
spring.datasource.url=jdbc:mysql://localhost/test
这种格式的优点在于它的简洁易读,上手难度低。缺点则是当配置信息复杂且数量众多时,容易变得混乱。
2. yaml文件:YAML是一种数据序列化格式,通常用于配置文件。Spring Boot也支持YAML格式的配置文件,它的文件扩展名通常为.yml或.yaml。YAML文件的结构更清晰,可以更好地组织复杂的配置信息。比如:
yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost/test
YAML文件的优点在于它的结构清晰,易于组织和管理复杂的配置信息。尤其是在处理多级配置的时候,YAML的层级结构能够直观地体现出配置的层级关系。缺点则是YAML的语法相较于properties稍显复杂,对新手可能有一定的学习门槛。
总结:Spring Boot的这两种配置文件格式各有优缺点,开发者可以根据自己的需求和习惯选择合适的配置文件格式。对于简单的配置信息,properties文件是一个不错的选择;而对于复杂的配置信息,YAML文件则能够更好地进行组织和管理。