聊一聊 SpringBoot 中配置加载优先级?( 二 )


spring.application.name=guides-propertiestestKey=key-spring.config.location复制代码输出结果如下:
2020-01-04 00:19:12.225  INFO 11147 --- [           main] com.glmapper.bridge.boot.BootStrap       : No active profile set, falling back to default profiles: default-------------------------------key-spring.config.location-------------------------------复制代码所以在使用 spring.config.location 指定外部配置文件时 , 需要此份配置文件需全量满足当前工程运行时所需 , 因为它不会去与 resources 目录下的配置文件去做 merge 操作 。
spring.config.additional-location在使用
spring.config.additional-location 这种方式自定义 locations 时 , 除了默认 locations 之外 , 还会使用 spring.config.additional-location 指定的 。

additional-location:言外之意就是增量的配置
在工程的根目录的 conf 目录下新建一个
application-addition.properties 配置文件 , 内容如下:
testKey=key-addition复制代码通过 java -jar
-Dspring.config.additional-location=conf/application-addition.properties guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 启动工程 , 输出结果如下:
2020-01-04 00:28:30.048  INFO 11384 --- [           main] com.glmapper.bridge.boot.BootStrap       : No active profile set, falling back to default profiles: default-------------------------------key-addition-------------------------------复制代码结论是 , 会覆盖默认 application.properties 中的配置值 。
spring.config.additional-location 与 spring.profiles.active 配置加载关系spring.config.location 不用多数 , 它就是独立的一份 , 使用它就不能使用其它的 。所以这里只分析
spring.config.additional-location 与 spring.profiles.active 配置加载关系 。
同时指定两个配置通过 java -jar -Dspring.profiles.active=dev
-Dspring.config.additional-location=conf/application-addition.properties guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 启动工程 , 输出如下:
2020-01-04 00:32:59.044  INFO 11451 --- [           main] com.glmapper.bridge.boot.BootStrap       : The following profiles are active: dev-------------------------------key-dev-------------------------------复制代码为了排除与 -D 参数顺序有关 , 也使用如下方式再执行一次:java -jar
-Dspring.config.additional-location=conf/application-addition.properties -Dspring.profiles.active=dev guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar , 输出结果与前面相同 , 所以可以得出 , spring.profiles.active 的优先级比 spring.config.additional-location 要高 。
`spring.config.additional-location` 指定差异增量配置在
spring.config.additional-location 中增加 additionKey
testKey=key-additionadditionKey=testAddition使用 java -jar
-Dspring.config.additional-location=conf/application-addition.properties -Dspring.profiles.active=dev guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 启动工程 , 输出如下:
2020-01-04 11:44:42.227  INFO 12821 --- [           main] com.glmapper.bridge.boot.BootStrap       : The following profiles are active: dev-------------------------------key-devtestAddition-------------------------------复制代码结论是
spring.config.additional-location 可以用于提供出 profiles 机制或者默认方式之外的增量配置 。
小结在使用外部化配置文件时 , 执行顺序为:
spring.config.location > spring.profiles.active >
spring.config.additional-location > 默认的 application.proerties 。
其中通过 spring.profiles.active 和
spring.config.additional-location指定的配置文件会与 默认的application.proerties merge 作为最终的配置 , spring.config.location 则不会 。
作者:glmapper
链接:
https://juejin.im/post/5e10136d5188253aae7d828c


推荐阅读