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

相关推荐
Gopher_HBo42 分钟前
zap日志 整体架构与数据流
后端
颜进强42 分钟前
09 · NestJS Middleware 中间件:链路最外层那个"最像 Express"的家伙
前端·后端·ai编程
创新技术阁42 分钟前
FastapiAdmin 实战:演示模式开关失效的排查记录
前端·后端·fastapi
拖孩42 分钟前
一个人 + AI 做的小程序,一个半月把服务器钱赚回来一半了
前端·后端·微信小程序
京东云开发者43 分钟前
从零构建一个生产级记忆型 AI Agent —— AgentScope 项目全景技术与学习指南
后端·架构·ai编程
SL_staff43 分钟前
JVS-Logic 实践:如何将‘需求→上线’从11天压缩至2小时?
java·后端·开源
编程老船长43 分钟前
权限不只是菜单按钮——QuickBlue 的 RBAC 与行级数据权限是怎么落地的
java·前端·后端
SL_staff43 分钟前
区域银行如何用JVS-BI两周打通异构数据库:面向开发者的低代码数据融合实践
java·后端·数据可视化
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent