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