SpringBoot属性配置优先级

又是美好的一天呀~
个人博客地址: huanghong.top

SpringBoot属性配置优先级

在Spring Boot中,应用程序可以使用多种方式来配置。以下是这些配置方式及其优先级的简要说明:

  1. 配置中心:如果应用程序使用了配置中心,那么配置中心中的配置文件将覆盖其他所有配置文件的值。这是最高优先级的配置方式。
  2. 命令行参数:可以在启动应用程序时使用命令行参数覆盖配置文件中的属性。这是第二高优先级的配置方式。
  3. 环境变量:可以使用环境变量来覆盖配置文件中的属性。这是第三高优先级的配置方式。
  4. Jar包同级目录下的配置文件:在启动应用程序时,如果在应用程序的jar包的同级目录下存在配置文件,那么这些配置文件将覆盖src/main/resources目录下的同名文件的值。这是第四高优先级的配置方式。
  5. Spring Boot提供的属性源:Spring Boot提供了多个属性源,如系统属性,JNDI属性等。这是第五高优先级的配置方式。
  6. @PropertySource注释:可以使用@PropertySource注释指定属性文件的位置。这是第六高优先级的配置方式。
  7. bootstrap.properties/bootstrap.yml:这是Spring Boot提供的特殊的配置文件,用于在application.properties/application.yml加载之前设置一些配置属性。这是第七高优先级的配置方式。
  8. application.properties/application.yml:这是应用程序的默认配置文件,如果没有其他配置文件覆盖它,则使用这些文件中的配置值。这是最低优先级的配置方式。

PropertySource的优先级

PropertySource的优先级按照以下顺序从高到低:

  1. 系统属性 (System properties)
  2. 环境变量 (Environment variables)
  3. 命令行参数 (Command line arguments)
  4. JNDI 属性 (JNDI attributes)
  5. Java EE 中的 ServletContext 参数 (ServletContext parameters)
  6. ServletConfig 中的初始化参数 (ServletConfig init parameters)
  7. @PropertySource 注解中指定的属性文件 (Properties defined in @PropertySource annotation)
  8. SpringApplication.setDefaultProperties 中指定的默认属性 (Default properties defined in SpringApplication.setDefaultProperties)
  9. Spring Framework 中的 @ConfigurationProperties 注解 (Properties defined in @ConfigurationProperties annotation)

属性覆盖规则

属性覆盖规则按照以下顺序从高到低:

  1. 配置中心的属性将覆盖所有其他属性。
  2. 命令行参数将覆盖配置文件中的属性。
  3. 环境变量将覆盖配置文件中的属性。
  4. jar包同级目录下的配置文件将覆盖src/main/resources目录下的同名文件的值。
  5. bootstrap.properties/bootstrap.yml文件将覆盖application.properties/application.yml文件中的值。
  6. 优先级较高的@PropertySource注释中指定的属性文件将覆盖优先级较低的@PropertySource注释中指定的属性文件中的值。
  7. 高优先级的属性源将覆盖低优先级的属性源中的值。

示例

以下是一个示例,展示了这些属性配置方式的优先级:

假设我们有一个名为"myapp"的应用程序,并且有以下配置文件:

application.properties
myapp.message=Hello from application.properties
bootstrap.properties
myapp.message=Hello from bootstrap.properties
myapp.properties
myapp.message=Hello from myapp.properties

在启动应用程序时,我们使用以下命令行参数:

java -jar myapp.jar --myapp.message="Hello from command line arguments"

在这种情况下,"Hello from command line arguments"将是应用程序的属性值,因为命令行参数是最高优先级的配置方式。如果我们没有使用命令行参数,则使用以下优先级来确定属性值:

  1. 配置中心(如果应用程序使用了配置中心)。
  2. 系统属性、环境变量和命令行参数。
  3. jar包同级目录下的myapp.properties文件。
  4. bootstrap.properties文件中的myapp.message属性值。
  5. application.properties文件中的myapp.message属性值。

因此,在没有使用命令行参数的情况下,应用程序的属性值将是"Hello from myapp.properties",因为myapp.properties是最高优先级的属性源。如果我们删除myapp.properties文件,则属性值将变为"Hello from bootstrap.properties",因为bootstrap.properties是次高优先级的属性源。

感谢阅读完本篇文章!!!
个人博客地址: huanghong.top

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喜欢正常冰的冰美式

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值