SpringBoot文档之Externalized Configuration的阅读笔记
-
Externalized Configuration
SpringBoot应用可以从properties文件、yaml文件、环境变量、命令行参数中得到配置参数。代码里可以使用注解
@Value
读取配置项的值。配置项参数的加载顺序,后加载的属性,可以覆盖已加载的同名属性的值。
- 默认配置,通过
SpringApplication.setDefaultProperties
指定参数值。 - 使用
@PropertySource
指定参数值的来源。 - 配置文件,比如
application.properties
或者application.yaml
。 - 操作系统的环境变量。
- Java的系统变量,即
System.getProperties()
。 - JNDI方式指定的属性。
- 为
ServletContext
对象配置的参数。 - 为
ServletConfig
对象配置的参数。 - 使用
SPRING_APPLICATION_JSON
指定的JSON格式的属性,对应的命令行变量名为spring.application.json
。
使用环境变量,样例如下:
使用JVM的系统变量,样例如下: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"}}'
- 命令行参数。
- 使用
@SpringBootTest
指定的参数值。 - 通过使用
@DynamicPropertySource
,在测试代码中指定参数。 - 通过使用
@TestPropertySource
,在测试代码中指定参数。 - 开发者工具,支持从
$HOME/.config/spring-boot
中加载配置参数。
加载配置文件的优先级:
-
Jar文件内的
application.properties
或者application.yaml
。 -
Jar文件内的
application-{profile}.properties
或者application-{profile}.yaml
。 -
Jar文件外的
application.properties
或者application.yaml
。 -
Jar文件外的
application-{profile}.properties
或者application-{profile}.yaml
。SpringBoot框架加载配置文件时,优先读取
properties
格式的同名配置文件。在启动类的
main
函数中增加如下代码,将显式禁用命令行参数。SpringApplication.setAddCommandLineProperties(false);
SpringBoot框架加载
application.properties
或者application.yaml
时,搜索路径如下:- 类路径,根路径。
- 类路径,
config
包。 - jar文件所在目录。
- jar文件所在目录的子目录
config
。 - jar文件所在目录的子目录
config
下的子目录。
在命令行中增加参数
spring.config.name
,可以指定配置文件的名称。java -jar myproject.jar --spring.config.name=myproject
使用上述样例启动应用程序,SpringBoot框架将搜索并加载配置文件
myproject.properties
或者myproject.yaml
。在命令行中增加参数
spring.config.location
,可以指定配置文件的搜索位置,样例如下:java -jar myproject.jar --spring.config.location=\ optional:classpath:/default.properties,\ optional:classpath:/override.properties
在配置文件名增加前缀
optional:
,表示假如找不到该位置的配置文件,并不影响应用程序启动,不会导致应用程序启动失败。spring.config.additional-location
和spring.config.location
的用途相同。SpringBoot加载配置文件的方案,灵活、强大,可依据业务特点酌情使用,不要花费过多的时间。
EnvironmentPostProcessor
允许在SpringBoot应用启动前修改Environment
中定义的属性的值。Java Config涉及如下注解:
@Value
@ConfigurationProperties
@Configuration
@EnableConfigurationProperties
@Validated
@Valid
@NotNull
需要结合样例、代码定义,深入理解上述注解的使用方法。
- 默认配置,通过
本文来自博客园,作者:jackieathome,转载请注明原文链接:https://www.cnblogs.com/jackieathome/p/18366279