spring外部化配置

Spring读取外部环境配置

spring会将以--开头的环境转换为property格式,随后添加至spring的环境中。例如:--server.port=8080会将其转换到配置环境中。

注意:如果此时配置文件中也存在server.port=9090根据配置优先级会将命令行启动时的参数覆盖配置文件中的配置。

Json应用属性

若存在某些属性无法与系统环境/环境变量存在限制无法进行配置,我们可以采用命令行配置json参数属性的方式交由spring添加到环境变量中。

css 复制代码
$ 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的配置文件进行配置应用环境变量我们可以通过在命令行启动时指定加载的配置文件:

arduino 复制代码
#如果这两个配置文件不是必须要存在的那么可以添加`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 编码格式进行导入的。

yaml 复制代码
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文件的处理方式进行处理。

arduino 复制代码
spring:
  config:
    import: "file:/etc/config/myconfig[.yaml]"|
    import: "file:/etc/config/myconfig[extension=.yaml]"

配置属性的随机值

RandomValuePropertySource 非常有用,可用于插入随机值(例如,用于存储机密信息或测试用例中)。它可以生成整数、长整型数、UUID 或字符串,如下例所示:

perl 复制代码
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 来指定其生效的环境。

kotlin 复制代码
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

相关推荐
鶴哥只手遮天几秒前
Spring Boot 4.1.1 深度源码解析-第 16 章 · 排序、元数据与报告:`AutoConfigurationSorter`、配置元数据、条件报告
java·后端·开源
鶴哥只手遮天2 分钟前
Spring Boot 4.1.1 深度源码解析-第 14 章 · 自动配置引擎:`AutoConfigurationImportSelector` 全流程
java·后端·开源
鶴哥只手遮天3 分钟前
Spring Boot 4.1.1 深度源码解析-第 24 章 · 日志系统:`LoggingApplicationListener` 与结构化日志
java·后端·开源
鶴哥只手遮天4 分钟前
Spring Boot 4.1.1 深度源码解析-第 22 章 · 数据源、连接池与事务
java·后端·开源
鶴哥只手遮天5 分钟前
Spring Boot 4.1.1 深度源码解析-第 17 章 应用类型推断与上下文工厂:`WebApplicationType`
java·后端·开源
鶴哥只手遮天5 分钟前
Spring Boot 4.1.1 深度源码解析-第 23 章 · JPA / Hibernate 与持久化模块
java·后端·开源
鶴哥只手遮天6 分钟前
Spring Boot 4.1.1 深度源码解析-第 12 章 · 事件总线与 Bootstrap 上下文
java·后端·开源
鶴哥只手遮天8 分钟前
Spring Boot 4.1.1 深度源码解析-第 05 章 · `ApplicationProperties` 与 `spring.main.*`:启动配置
java·后端·开源
鶴哥只手遮天9 分钟前
Spring Boot 4.1.1 深度源码解析-第 07 章 · ConfigData 体系深潜:位置解析、profile 迭代求解
java·后端·开源
鶴哥只手遮天10 分钟前
Spring Boot 4.1.1 深度源码解析-第 20 章 · WebFlux 与 Reactor Netty:响应式栈与编解码
java·后端·开源