Spring-Boot能从多种属性源获得属性,包括以下几种:
- 命令行参数
- Java:comp/env里的集中JNDI属性
- JVM系统属性
- 操作系统环境变量
- 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如$(random.log))
- 引用程序意外的application.propertie或者appliaction.yml文件
- 打包在应用程序内的application.propertie或者appliaction.yml文件
- 通过@PropertySource标注的属性源
- 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性,都会覆盖低优先级的相同属性。例如,命令行参数就会覆盖其他属性源的属性。
application.properties和application.yml文件能放在以下四个位置
- 外置,在相对于应用程序运行的目录的/config子目录
- 外置,在应用程序运行的目录里
- 内置,在config包内
- 内置,在Classpath根目录
同样这个列表按照优先级排序,也就是说,/config子目录的application.properties会覆盖应用程序Classpath里的application.properties中的相同属性。
此外,如果你在同一优先级位置同时有application.properties和application.yml,那么application.yml里的属性会覆盖application.propertise里的属性。