上一篇讲了 Spring Boot 的依赖注入 本篇来讲一讲Spring Boot 外部化配置 Spring Boot 初识:
(PropertySource)
加载顺序
Spring Boot 使用一种非常特殊的PropertySource
顺序,旨在允许合理地覆盖值。后面的属性源可以覆盖前面定义的值。按以下顺序考虑来源:
- 默认属性(由
SpringApplication.setDefaultProperties
指定)。 @Configuration
类上的@PropertySource
注释。请注意,在刷新应用程序上下文之前,不会将此类属性源添加到环境中。这对于配置某些属性为时已晚,例如在刷新开始之前读取的logging.*和spring.main.*。- 配置数据(例如
application.properties
文件)。 RandomValuePropertySource
加载random.*
形式的属性。- 操作系统环境变量。
- Java 系统属性 (
System.getProperties()
)。 - 通过
java:comp/env
配置的 JNDI 属性 ServletContext
初始化参数。ServletConfig
初始化参数。SPRING_APPLICATION_JSON
(嵌入环境变量或系统属性中的内联 JSON)的属性。- 命令行参数。
- 测试环境中的属性
properties
:@SpringBootTest
和测试注解
。 - 测试中的
@DynamicPropertySource
注释。 - 测试环境中的
@TestPropertySource
注解配置。 Devtools 全局配置
.$HOME/.config/spring-boot (当 devtools 被激活~/.spring-boot-devtools.properties
)
配置数据文件按以下顺序考虑:
- jar 包外的
application-{profile}.properties
或application-{profile}.yml
配置 - jar 包内的
application-{profile}.properties
或application-{profile}.yml
配置 - jar 包外的
application.properties
或application.yml
配置 - jar 包内的
application.properties
或application.yml
配置
命令行属性
默认情况下, SpringApplication
会获取--
参数(例如 --server.port=9000
),并将这个 property
添加到 Spring 的 Environment
中。如前所述,命令行属性始终优先于基于文件的源属性。
如果不想加载命令行属性,可以通过 SpringApplication.setAddCommandLineProperties(false)
禁用。
json应用程序属性
环境变量和系统属性通常有限制,这意味着某些属性名称无法使用。为了解决这个问题,Spring Boot 允许您将一个属性块编码到单个 JSON 结构中。
当您的应用程序启动时,任何spring.application.json
或SPRING_APPLICATION_JSON
属性都将被解析并添加到Environment
.
例如,可以在 UN*X shell 的命令行上提供SPRING_APPLICATION_JSON
属性作为环境变量:
$ SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
在前面的示例中,您最终会进入Spring Environment
的 my.name=test
。
同样的, 也可以提供JSON属性:
$ java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
或者json 命令行参数:
$ java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}'
如果要部署到经典的Application Server,您还可以使用名为java:comp/env/spring.application.json
的 JNDI 变量。
标签:name,Spring,Boot,application,初识,my,属性 From: https://blog.51cto.com/u_16111319/6891150