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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68701.html