Spring Boot让你外部化配置你的配置,以便你使用同一套代码运行在不同的环境。你能使用多种多样的外部配置资源,包括properties files, YAML files, environment variables, 还有command-line arguments。
属性值能被@Value annotation直接注入到你的beans中,通过Spring’s Environment进入或者,通过@ConfigurationProperties绑定结构化的对象。
Spring Boot使用一个特定的PropertySource属性的设计,允许合乎情理的重写值。属性通过以下顺序重写更早的值:@A
- Default properties 具体被SpringApplication.setDefaultProperties设置
- @PropertySource在你的@Configuration类上,直到应用程序上下文被刷新有些配置资源是不能被添加到Environment的。因为太晚而不能确保的属性,比如logging.* and spring.main.*,开始刷新之前就被读取了。
- 配置数据比如application.properties文件
- 仅仅在有random.*的RandomValuePropertySource中
- 操作系统环境变量
- Java系统变量
- 来自java:comp/env的JNDI
- ServletContext初始化参数
- ServletConfig初始化参数
- SPRING_APPLICATION_JSON
- 命令行参数
- properties attribute on your tests
- . @TestPropertySource在你的测试
- Devtools global settings properties
配置文件数据按照以下顺序应用:
- 在jar包里面的application.properties and YAML 文件
- 在jar包里面的application- {profile}.properties and YAML 文件
- 在jar包外面的application.properties and YAML 文件
- 在jar包外面的application- {profile}.properties and YAML 文件
一般建议你选择一个使用。如果既有.properties又有 .yml在同一个位置,.properties优先。
Accessing Command Line Properties访问命令行参数
默认SpringApplication解析任何命令行参数,参数以--开头,比如--server.port=9000,把一个属性添加到Spring Environment。像之前提到的命令行参数总是优先替代属性.
如果你不想让命令行属性添加到Environment,你可以禁用它们通过使用SpringApplication.setAddCommandLineProperties(false).
JSON Application Properties
环境变量和系统属性,经常有一些名字禁止使用或者被限制。Spring Boot允许你把一块属性加入一个单独的JSON结构文件。
当你的应用启动,任何spring.application.json或者SPRING_APPLICATION_JSON将会被解析和添加到Environment。
例如SPRING_APPLICATION_JSON属性文件,能被应用到
这个执行例子,以这个结束my.name=test 的值在Spring的 Environment.
$ SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
同样也提供属性作为一个系统属性。
$ java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
命令行参数
java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}
External Application Properties外部应用属性
当Spring Boot应用启动将会自动的发现和加载在下列位置的application.properties和 application.yaml文件:
1在classpath
a.classpath 的根路径
b.classpath的/config包中
2.在当前文件夹
a.当前目录
b.当前目录的子目录里的/config目录里
c. /config子目录的 直接子目录。
这个列表顺序优先被加载。简单说覆盖更早加载顺序的配置文件 。