jjzjj

java - Spring Boot : How do you specify an environment variable that has dashes in the application. 属性?

coder 2024-03-08 原文

我有一个如下所示的 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 变量只能包含字母(azAZ)、数字( 09) 或下划线字符 (_)。按照惯例,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/

有关java - Spring Boot : How do you specify an environment variable that has dashes in the application. 属性?的更多相关文章

随机推荐