Spring里、配置application.yaml、bootstrap.yaml application.properties、bootstrap.properties他们的区别。
一、先从后缀来讲:
SpringBoot默认支持properties和yaml(或者yml)两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用yaml格式。也就是yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要。虽然默认为properties,但现在多用yaml。
如果工程中同时存在application.properties文件和 application.yaml文件,yaml文件会先加载,而后加载的properties文件会覆盖yaml文件。
二、在分析前缀:
bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。
application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
三、覆盖分析
启动上下文时,Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。
初始化的时候,Bootstrap Context 负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖。
也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换。
四、应用场景分析:
SpringCloud配置时、这时需要在 bootstrap.yml 配置文件中指定 spring.application.name 和 spring.cloud.nacos,添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
spring:
application:
name: yxmall
cloud:
nacos:
config:
server-addr: 192.168.56.10:8848
namespace: 93ab9b83-cca4-48b5-abad-8a46f12ac0ba
ext-config:
- dataId: redis.yml
- dataId: druidDatasourceView.yml
file-extension: yml
discovery:
namespace: 93ab9b83-cca4-48b5-abad-8a46f12ac0ba
server-addr: 192.168.56.10:8848
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
而正常基本application.yaml满足单体架构配置要求。优先选用yaml。带缩进的格式对于配置的显示更加直观。当然 yaml 配置也不是万能的,例如,yaml 配置目前不支持 @PropertySource 注解。使用时注意即可。