SpringBoot学习笔记(八)——外部配置及其优先级
现在我们用最原始的方式来进行属性绑定。
将service类的代码修改如下:
@Component @ConfigurationProperties public class UserService { private String password; public String test() { return password; } // setter getter }
我们有五种方法来设置属性的值。
方法一:
application.properties中配置
password=in_properties
方法二:
删掉application.properties⽂件,新建application.yml
password:in_yml
如果同时存在application.properties和application.yml,application.properties的优先级更⾼.
方法三:
假如在JVM环境变量中配置,如果是通过java命令运⾏,就是-Dpassword=zhouyu123456jvm

最后password取到的值为JVM环境变量中的值。
我们在操作系统的环境变量中设置,设置完IDEA重启才能⽣效。
方法四:
操作系统环境变量中配置:
最后结果仍然是JVM环境变量中的值,那如果把JVM中的环境变量中配置的删除掉,就能获取掉操作系
统环境变量中所配置的值了
所以,JVM环境变量优先级 > 操作系统环境变量 > application.properties > application.yml
方法五:
还可以通过命令⾏参数来设置值:

相当于:java -jar ZhouyuSpringBoot-Teacher-1.0-SNAPSHOT.jar --password=1111
这种⽅式的优先级⾼于JVM环境变量优先级
所以
命令⾏参数 > VM环境变量优先级 > 操作系统环境变量 > application.properties > application.yml
其它方式优先级
除了这⼏种配置参数之外,还有很多其他⽅式,优先级从低到⾼为:
1. SpringBoot默认值,通过SpringApplication.setDefaultProperties所设置的
2. 在@Configuration配置类上通过@PropertySource注解引⼊的properties⽂件,注意在Spring容器
刷新之前这种配置是不会⽣效的,所以通过这种⽅式所配置的loggin.*,spring.main.*的配置项在
容器启动过程中是不会⽣效的。
3. Config data
a. 同⼀个Jar包内的application.properties和YAML
b. 同⼀个Jar包内的application-{profile}.properties and YAML
c. jar包外的application.properties and YAML
d. jar包外的application-{profile}.properties and YAML
4. 操作系统环境变量
5. JVM环境变量
6. ServletContext初始化参数
7. ServletConfig初始化参数
8. 嵌⼊在环境变量中的⾏内JSON,⽐如-
Dspring.application.json='{"password":"zhouyu123456json"}'
9. 命令⾏参数
10. 测试环境
11. Devtools全局设置
对配置文件的查找
对于application.properties and application.yaml⽂件,Spring Boot会(优先级从低到⾼):
1. 先从classpath下找
a. classpath根⽬录
b. classpath下的config⽬录
2. 应⽤启动时的当前⽬录
a. 当前⽬录
b. 当前⽬录下的/config⼦⽬录
c. /config⼦⽬录下的⼦⽬录(这个⼦⽬录名字随便叫,只要⾥⾯有application.properties andapplication.yaml⽂件就可以)
默认会找名字叫做application的⽂件,我们可以通过--spring.config.name=myproject换⼀个名字
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南