Externalized Configuration
SpringBoot应用可以从properties文件、yaml文件、环境变量、命令行参数中得到配置参数。
代码里可以使用注解@Value
读取配置项的值。
配置项参数的加载顺序,后加载的属性,可以覆盖已加载的同名属性的值。
SpringApplication.setDefaultProperties
指定参数值。@PropertySource
指定参数值的来源。application.properties
或者application.yaml
。System.getProperties()
。ServletContext
对象配置的参数。ServletConfig
对象配置的参数。SPRING_APPLICATION_JSON
指定的JSON格式的属性,对应的命令行变量名为spring.application.json
。SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
使用JVM的系统变量,样例如下: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
包。config
。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
参与评论
手机查看
返回顶部