Spring Boot 属性配置文件

声明

本文翻译自 Spring Boot Reference Guide (https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/html) ,择其第 24.3. Application Property Files 以及 24.4. Profile-specific Properties。

应用属性文件

SpringApplicationapplication.properties文件载入属性时按以下位置读取并添加到 Spring Enviroment

  1. 当前目录下/config中的子目录
  2. 当前目录(jar 所在目录)
  3. classpath:/config
  4. classpath 根

上列按优先级从上到下排序(高优先级的会覆盖低优先级的属性)。

同样地也可以使用 YAML (.yml) 文件代替 .properties

如果不想使用application.properties作为配置文件名,也可以选择替换成其他的文件名,指定spring.config.name环境属性。当然也可以通过spring.config.location环境属性指定位置(由英文逗号分隔的目录列表或者文件路径)。
以下示例来说明如何指定不同的文件名:

java -jar myproject.jar --spring.config.name=myproject

以下示例来说明如何指定两个配置路径:

java -jar myproject.jar \
  --spring.config.location=classpath:/default.properties,classpath:/override.properties

spring.config.namespring.config.location都是最先阶段被使用的,来决定哪些文件需要加载,所以都必须定义为环境属性(特别是操作系统环境变量、系统属性,或者命令行参数)。

如果spring.config.location包含目录(否则就是文件),则应当以/作为结尾(在应用运行中,位置之中的配置载入之前,包括 profile-specific 文件名,会附加由spring.config.name生成的名称)。在spring.config.location指定为文件的则不支持 profile-specific 形式,且会被其他任何 profile-specific 属性覆盖。

配置路径会以倒序查找。默认地,配置的路径是classpath:/,classpath:/config/,file:./,file:./config/,那么其最终查找路径依次是:

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

当自定义的配置路径是通过spring.config.location配置时,就会替换上述默认路径。例如,spring.config.location的值是classpath:/custom-config/,file:./custom-config/,那么查找结果的顺序则依下:

  1. file:./custom/config/
  2. classpath:custom-config/

又或者,当自定义的配置路径是通过spring.config.additional-location配置时,那么除默认路径也会使用额外路径。额外的路径要优先于默认路径的查找。例如,配置的额外路径是classpath:/custom-config/,file:./custom-config/,那么查找的路径则依次变成:

  1. file:./custom-config/
  2. classpath:custom-config/
  3. file:./config/
  4. file:./
  5. classpath:/config/
  6. classpath:/

其查找顺序可以在一个配置文件指定默认的值,然后选择性地重写为其他的。也可以提供默认值,通过application.properties(或者任何其他基础名称的如定义的spring.config.name)。这些默认值之后就会在运行中被自定义路径中的不同文件覆盖。

如果使用环境变量而不是系统属性,由于大部分操作系统不允许英文句号分隔的键名,所以可以使用下划线代替(例如,SRPING_CONFIG_NAME代替spring.config.name)。

如果应用运行在容器中,那么 JNDI 属性(在java:comp/env)或者 servlet 上下文初始化参数会被代替使用,同样地有环境变量,系统属性。

Profile-specific 属性

除了application.properties文件,profile-specific 属性也可以通过命名格式定义:application-{profile}.propertiesEnvironment有一组默认属性集合(默认地,为[default])被使用,如果没有指定激活的 profiles。也就是说,如果没有明确地激活 profiles,那么属性就从application-default.properties加载。
profile-specific 属性会从同一个位置加载为application.properties,且 profile-specific 文件总会覆盖非 profile-specific 的,无论 profile-specific 文件是在 jar 包之内还是之外。
如果有多个 profiles 被指定,则应用最后者胜出策略。例如,profiles 通过spring.profiles.active属性指定,那么会在那些通过SpringApplicationAPI 配置的最后添加,并依此排优先级。

如果在spring.config.location指定了任意文件,profiles-specific 形式文件则会被忽略。如果想同时使用 profile-specific 属性,那么就需要在spring.config.location中指定为目录。

参考

[1] Application Property Files
[2] Profile-specific Properties


推荐文章

AI最佳实践全栈式从0到1开发个人博客系统

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我喺小VIE

努力创作,值得肯定●゜ⅴ゜)ノ

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值