springboot(13)配置读取优先级

Spring Boot允许将配置外部化(externalize),这样你就能够在不同的环境下使用相同的代码。你可以使用properties文件,YAML文件,环境变量和命令行参数来外部化配置。使用@Value注解,可以直接将属性值注入到beans中,然后通过Spring的 Environment 抽象或通过 @ConfigurationProperties 绑定到结构化对象来访问。

Spring Boot设计了一个非常特别的 PropertySource 顺序,以允许对属性值进行合理的覆盖,属性会以如下的顺序进行设值:

读取顺序来源
1home目录下的devtools全局设置属性( ~/.spring-bootdevtools.properties ,如果devtools激活)
2测试用例上的@TestPropertySource注解
3测试用例上的@SpringBootTest#properties注解
4命令行参数
5来自 SPRING_APPLICATION_JSON 的属性(环境变量或系统属性中内嵌的内联JSON)
6ServletConfig 初始化参数
7ServletContext 初始化参数
8来自于 java:comp/env 的JNDI属性
9Java系统属性(System.getProperties())
10操作系统环境变量
11RandomValuePropertySource,只包含 random.* 中的属性
12没有打进jar包的Profile-specific应用属性( application-{profile}.properties 和YAML变量)
13打进jar包中的Profile-specific应用属性( application-{profile}.properties 和YAML变量)
14没有打进jar包的应用配置( application.properties 和YAML变量)
15打进jar包中的应用配置( application.properties 和YAML变量)
16@Configuration 类上的 @PropertySource 注解
17默认属性(使用 SpringApplication.setDefaultProperties 指定)
Spring Boot 的配置文件非常灵活,可以根据需要选择不同的文件进行配置。Spring Boot 的配置文件分为两种:application.properties 和 application.yml。两种配置文件的优先级是相同的,都可以用来配置 Spring Boot 的应用程序。 首先,Spring Boot 会从 application.properties 和 application.yml 文件中读取配置信息,如果在 application.properties 和 application.yml 中都有同名的属性,则 application.yml 中的配置会覆盖 application.properties 中的配置。 其次,Spring Boot 会从外部配置文件中读取配置信息。外部配置文件可以指定在启动命令中,例如: ``` java -jar myapp.jar --spring.config.name=myapp --spring.config.location=file:/opt/myapp/config/ ``` 这条命令告诉 Spring Boot 使用 myapp.properties 或 myapp.yml 作为配置文件,并且从 /opt/myapp/config/ 目录中读取配置信息。同样,如果一个属性在外部配置文件中被定义,则会覆盖 application.properties 和 application.yml 中的配置。 最后,Spring Boot 会从命令行参数中读取配置信息。例如,生成的 jar 包可以使用以下命令运行: ``` java -jar myapp.jar --server.port=8081 --debug=true ``` 这条命令告诉 Spring Boot 使用 8081 端口启动应用程序,并且启用调试模式。同样,命令行参数中的属性会覆盖所有其他配置信息。 总的来说,Spring Boot 的配置文件优先级为:命令行参数 > 外部配置文件 > application.yml > application.properties。在实际开发中,我们可以根据需要灵活选择不同的配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值