我有一个如下所示的 application.properties
文件:
mcl.sso.frontend-url=http://blah.com:9001
mcl.sso.mocking-agent=false
我试图从命令行覆盖这两个变量。这应该可以通过设置环境变量来实现。这是我运行命令的方式:
MCL_SSO_FRONTEND_URL='foobar' MCL_SSO_MOCKING_AGENT='true' ./gradlew run
但是,当我打印出这些变量的值时,mcl.sso.mocking-agent
等于“true”(正如预期的那样),但是 mcl.sso.frontend-url
仍然等于“http://blah.com:9001”(意外)。为什么 mcl.sso.frontend-url
不更改属性的值?我只能假设这与 Spring 将环境变量转换为属性键的方式有关,但我找不到任何关于此的具体文档。
最佳答案
来自 spring-boot documentation :
从环境变量绑定(bind)
大多数操作系统都对可用于环境变量的名称施加了严格的规则。例如,Linux shell 变量只能包含字母(a
到 z
或 A
到 Z
)、数字( 0
到 9
) 或下划线字符 (_
)。按照惯例,Unix shell 变量的名称也将以大写形式显示。
Spring Boot 宽松的绑定(bind)规则是为了尽可能兼容这些命名限制。
要将规范形式的属性名称转换为环境变量名称,您可以遵循以下规则:
- 将点 (
.
) 替换为下划线 (_
)。 - 删除所有破折号 (
-
)。 - 转换为大写。
例如,配置属性 spring.main.log-startup-info
将是一个名为 SPRING_MAIN_LOGSTARTUPINFO
的环境变量。
绑定(bind)到对象列表时也可以使用环境变量。要绑定(bind)到 List
,元素编号应在变量名称中用下划线括起来。
例如,配置属性 my.service[0].other
将使用名为 MY_SERVICE_0_OTHER
的环境变量。
关于java - Spring Boot : How do you specify an environment variable that has dashes in the application. 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31620916/