SpringBoot配置文件高级用法实战分享
作者:码到三十五
一、总体优先级顺序
命令行参数:通过命令行启动参数指定的配置拥有最高优先级。这包括
java -jar
命令后跟随的配置参数。来自
SPRING_APPLICATION_JSON
的属性:嵌入在环境变量或系统属性中的JSON格式配置信息,优先级仅次于命令行参数。系统属性:通过Java系统属性传递的配置值,例如使用
-D
参数设置的值。环境变量:操作系统环境变量中的配置值。
随机生成的属性(仅用于开发中的随机端口号等):Spring Boot在开发环境中可以随机生成一些属性,例如随机端口号。
应用配置文件(
application.properties
或application.yml
):按照特定顺序加载的配置文件。在
@Configuration
类中通过@PropertySource
注解定义的属性:通过编程方式指定的配置文件。默认属性(通过
SpringApplication.setDefaultProperties
指定的默认属性):这些属性在所有其他特定属性源之后加载,因此优先级最低。
二、应用配置文件的详细优先级
对于application.properties
或application.yml
等应用配置文件,Spring Boot按照以下顺序加载,优先级从高到低:
命令行中指定的配置文件:通过
--spring.config.location
参数指定的配置文件。项目目录下的
config
子目录:位于项目根目录下的config
(和jar包同一目录)文件夹中的配置文件。项目根目录:项目根目录(和jar包同一目录)下的配置文件。
类路径下的
config
包:src/main/resources/config
目录中的配置文件。类路径根目录:
src/main/resources
目录中的配置文件。
特别注意的是,配置文件内容是在的合并的前提下执行优先级,即不重复的配置内容会合并!
三、文件类型优先级
在同一位置下,如果存在多种类型的配置文件(如.properties
、.yml
、.yaml
),它们的优先级顺序为:
.properties
.yml
.yaml
四、特定环境配置
当使用特定环境的配置文件(如application-dev.yml
、application-prod.yml
)时,激活的特定环境配置文件将覆盖通用配置文件中的相同属性。如果指定了多个特定环境配置文件,则后面的配置文件将覆盖前面的配置文件中的相同属性。
五、配置文件高级用法
假设有以下配置文件:
类路径根目录下application.yml
内容:
pack: name: root-name age: 11
类路径config
包下application.yml
内容:
pack: name: classpath/config-name
读取配置pack.name
和pack.age
,输出结果为:
name = classpath/config-name, age = 11
这验证了配置文件内容的合并以及优先级规则。
5.1 修改配置文件名
使用spring.config.name
环境属性可以修改默认的配置文件名:
java -jar springboot-configfile-1.0.0.jar --spring.config.name=pack
5.2 修改配置文件位置
使用spring.config.location
环境属性指定配置文件的位置:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:classpath:/config/pack1.yml
使用optional:
前缀可以忽略文件不存在的错误。也可以指定目录让Spring Boot自动拼接文件名:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/config/ --spring.config.name=pack
5.3 使用文件系统路径
指定文件系统中的配置文件路径:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:file:f:/ --spring.config.name=pack
5.4 附加配置文件
如需要添加其它的配置文件,并非是替换默认的配置文件,可从附加位置加载属性(可以覆盖默认位置中的属性值)。
使用spring.config.additional-location
加载额外的配置文件:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.name=pack --spring.config.additional-location=optional:file:f:/pack-akf.yml
5.5 可选位置
默认当指定的配置数据文件不存在时,SpringBoot会抛出ConfigDataLocationNotFoundException异常,应用程序将无法启动.
使用optional:
前缀忽略配置文件不存在的错误:
java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.on-not-found=ignore
忽略所有ConfigDataLocationNotFoundException并始终继续启动应用程序,可以使用spring.config.on-not-found属性
六、多配置文件处理方式
背景需求
程序在部署的时候,一般是将配置文件放在jar包的外面,而当存在多个文件需要加载时,如项目中有:
cfg1.properties cfg2.properties
解决方法一
合并所有配置文件至一个文件中配置加载,然后使用spring.config.location配置加载。
把cfg1.properties和cfg2.properties中的配置都合并至cfg.properties中。
java -jar app.jar --spring.config.location=file:/path/to/cfg.properties
解决方法二
保持文件的各自独立,使用spring.config.location属性来指定应用程序的配置文件路径。可以指定多个配置文件,使用逗号分隔的文件路径,例如:
java -jar api.jar --spring.config.location=file:/path/cfg1.properties,file:/path/cfg2.properties
到此这篇关于SpringBoot配置文件高级用法实战分享的文章就介绍到这了,更多相关SpringBoot配置文件用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!