Spring配置加载顺序

"本文详细介绍了SpringBoot应用的配置加载顺序,包括命令行参数、JNDI属性、Java系统属性、环境变量、RandomValuePropertySource、应用特定配置文件以及默认的application.properties/yml文件。此外,还解析了SpringCloudConfig的配置资源规则,包括{application}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring配置加载顺序

对于一个标准的Spring Boot应用,可以通过多种方式进行配置。比如前面一直使用的配置文件(properties或yml)、命令行参数,此外还有系统环境变量、JVM的参数等。下面我们来了解一下这些配置方式。

  • 命令行参数:命令行参数使用–xxx=xxx格式在启动时传递,比如:–server.port=2300,就是将服务的端口设置为2300。这里的参考可以是Spring Boot框架的参数,也可以是我们自定义的参数或属性配置。
  • 从java:comp/env加载的JNDI属性。·Java系统属性:通过-Dxxx=xxx格式设置,只是优先级比上面的配置低。
  • 操作系统环境变量:这里需要注意的一点是,有些操作系统配置时不支持使用点“.”进行分割,则需要将点替换成下画线。例如,server.port需要替换成server_port。
  • RandomValuePropertySource:使用random.*属性进行配置,主要是在系统配置中需要使用随机数的地方使用,如foo.securityid=${random.value}。
  • 特定应用的properties或yml配置文件:这些文件名称的命名格式为application-{profile}.properties或者yml,通过指定所要使用的profile来加载,例如前面使用的application-dev.properties配置文件。
  • 应用配置文件application.properties或yml文件:为Spring Boot应用所默认加载的配置文件,可以通过上面的配置进行全部或部分配置属性的覆写。
  • @Configuration、@PropertySource或@ConfigurationProperties所指向的配置文件,其中@ConfigurationProperties可以批量按照一定规范将配置注入到一个Bean中,但这些配置的优先级较低。
配置资源规则详解

我们知道了配置文件可以存放在Git库或者文件系统中,但是应该如何放置这些配置文件?配置客户端又是如何读取这些文件?配置服务器又是如何知道该返回哪个配置文件的数据给客户端呢?其实Spring Cloud Config是通过EnvironmentRepository来获得Environment对象解决这些问题的,该对象是对Spring的Environment(包括做为主要配置属性的propertySources)对象的浅拷贝。在加载Environment相应资源时参数化成了下面3个变量。

  • {application}:对应客户端配置中的spring.application.name。
  • {profile}:对应客户端配置中的spring.profiles.active(多个profile使用逗号分开)。
  • {label}:对应配置服务器端所配置的spring.cloud.config.label,如Git中的master。
访问配置服务器上的配置文件
  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

label则是对应的Git上分支名称,是一个可选参数,如果没有,则默认从master分支进行查找。

配置项

1、搜索目录

spring.cloud.config.server.git.searchPaths=foo

2、缓存目录

# Git仓库本地临时目录
spring.cloud.config.server.git.basedir=tmp/

3、使用本地系统

#可直接从当前的classpath或文件系统中加载配置文件
spring.profiles.active=native
#默认配置服务器是从classpath目录下加载配置文件,这个属性来设置配置文件所在的目录。对于所配置的文件路径,配置必须以“file:”开头。如果配置服务器的操作系统是Windows系统,那么对于绝对路径,还需要对其中的“/”进行转义。也支持使用{application}、{profile}和{label} 占位符进行配置。
spring.cloud.config.server.native.searchLocations
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姠惢荇者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值