【发布时间】:2021-03-30 18:31:49
【问题描述】:
我正在尝试在我的 Spring Boot 应用程序中创建一个可以被环境变量覆盖的属性。这样做的典型方式是这样的:
some:
property: ${some_property:default_value}
然后我们使用 docker compose 将环境变量注入到该属性中。我遇到的问题是指列表。我想做同样的概念,但在 yml 中使用列表格式。列表的正常格式是这样的:
some:
property:
- value1
- value2
- value3
我想让它成为一个环境变量,上面有默认值。所以像这样(但......正确):
some:
property: ${some_list:[
- defaultValue1
- defaultValue2
- defaultValue3
]}
技术上可行的方法是,如果我将该属性设为逗号分隔字符串,然后在代码中对其进行解析,但是当您有很多非常长的值时,使用单个字符串包含所有这些值可能会很难看。那么有没有办法让列表 Spring 属性成为 application.yml 中具有默认值的变量(所以不是 java 代码中的注释)
【问题讨论】:
-
为什么不把默认值放在
application.yml中,然后用一个环境变量覆盖它们,而不管application.yml吗? -
只有将它添加到启动命令中才有效吗?就像 -Dsome.list=comma,delimited,value 一样?我们有一个 .env 文件,它导出了一堆环境变量,而 Spring Boot 应用程序使用了这些变量(不过我相信 docker compose 会处理它们之间的关系)
-
"只有将它添加到启动命令中才有效?" - 不。它不必添加到启动命令或其他任何内容中。 “就像 -Dsome.list=comma,delimited,value 一样?” - 这不是环境变量。这是一个 JVM 系统属性,它也可以工作。
-
明白了。原来我不知道弹簧属性的格式是相关的,即破折号而不是驼峰式和所有大写环境变量
标签: java spring spring-boot yaml