Spring读取外部环境配置
spring会将以--开头的环境转换为property格式,随后添加至spring的环境中。例如:--server.port=8080会将其转换到配置环境中。
注意:如果此时配置文件中也存在server.port=9090根据配置优先级会将命令行启动时的参数覆盖配置文件中的配置。
Json应用属性
若存在某些属性无法与系统环境/环境变量存在限制无法进行配置,我们可以采用命令行配置json参数属性的方式交由spring添加到环境变量中。
$ java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
$ SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
$ java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}'
加载外部应用属性
如果我们不想通过spring的配置文件进行配置应用环境变量我们可以通过在命令行启动时指定加载的配置文件:
#如果这两个配置文件不是必须要存在的那么可以添加`optional`前缀表明
$ java -jar myproject.jar --spring.config.location=\
optional:classpath:/default.properties,\
optional:classpath:/override.properties
导入其他配置文件
如果希望应用能够从其他位置获取更多的数据可以配置spring.config.import指定加载的数据。
其中import.properties将会以utf-8编码加载。默认情况下,属性文件是使用 ISO-8859-1 编码格式进行导入的。
spring:
application:
name: "myapp"
config:
import: "optional:file:./dev.properties"
spring:
config:
import: "classpath:import.properties[encoding=utf-8]"
注意:如果导入的dev.properties存在与当前配置文件相同的环境项,将会进行属性的覆盖。从导入的 dev.properties 文件中获取的值将优先于触发导入操作的原始文件中的值。在上面的例子中, dev.properties 可以将 spring.application.name 的值重新定义为另一个数值。
spring也可以为无扩展名的配置文件指定处理方式,如下示例便是将myconfig文件以yaml文件的处理方式进行处理。
spring:
config:
import: "file:/etc/config/myconfig[.yaml]"|
import: "file:/etc/config/myconfig[extension=.yaml]"
配置属性的随机值
RandomValuePropertySource 非常有用,可用于插入随机值(例如,用于存储机密信息或测试用例中)。它可以生成整数、长整型数、UUID 或字符串,如下例所示:
my:
secret: "${random.value}"
number: "${random.int}"
bignumber: "${random.long}"
uuid: "${random.uuid}"
number-less-than-ten: "${random.int(10)}"
number-in-range: "${random.int[1024,65536]}"
应用配置部分处理
当我们需要对某一个配置类启用某一环境配置可以采用@Profile注解声名启用的配置。
当带有 @Component 、 @Configuration 或 @ConfigurationProperties 标记的配置项,都可以通过 @Profile 来指定其生效的环境。
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {
// ...
}
文档详情:外部化配置 :: Spring Boot --- Externalized Configuration :: Spring Boot