【问题标题】:Spring Boot: How do you specify an environment variable that has dashes in the application.properties?Spring Boot:如何指定在 application.properties 中有破折号的环境变量?
【发布时间】:2015-07-24 22:47:52
【问题描述】:

我有一个如下所示的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 将环境变量转换为属性键的方式有关,但我找不到任何具体的文档。

【问题讨论】:

  • 您正在寻找“宽松的属性绑定”,而它的实际实现方式是……优雅。我不记得它的生成器在哪里,但这可能是一个开始。
  • @AnandShah 谢谢,这是一个有用的参考。

标签: java spring spring-boot


【解决方案1】:

自 Spring Boot 1.2.5 起已修复此问题。以前,您必须使用 MCL_SSO_FRONTEND-URL(请注意不能转换为下划线的破折号)。

您可以使用this sample project 进行绑定。

【讨论】:

  • 在 Linux 上,环境变量键中不允许使用破折号。解决方案是使用MCL_SSO_FRONTENDURL。 IE。属性名称本身没有分隔符。记录在这里:github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0
  • 多伦,这正是我写的,不是吗?以前应该添加破折号,不再需要。
  • Stephane:显然这就是你的意思。我不清楚属性名称中是否应该有 no 分隔符,即使它由多个单词组成。阅读您的答案后,我必须先玩一下,然后才能做对。只想说清楚。
  • 从 env 变量中删除连字符似乎不再起作用
  • @DoronGold 答案提到了 Spring Boot 1.2.5,但您的评论引用了 Spring Boot 2.x 中可用的功能。这可能会让人们误以为它在旧版本中也可用,尤其是考虑到链接页面没有提及它是在哪个版本的 SB 中引入的。
【解决方案2】:

摆脱破折号:

mcl.sso.mocking-agent > MCL_SSO_MOCKINGAGENT

【讨论】:

    【解决方案3】:

    来自spring-boot documentation

    从环境变量绑定

    大多数操作系统都对可用于环境变量的名称施加了严格的规则。例如,Linux shell 变量只能包含字母(azAZ)、数字(09)或下划线字符(_)。按照惯例,Unix shell 变量的名称也将大写。

    Spring Boot 宽松的绑定规则尽可能地与这些命名限制兼容。

    要将规范形式的属性名称转换为环境变量名称,您可以遵循以下规则:

    • 将点 (.) 替换为下划线 (_)。
    • 删除所有破折号 (-)。
    • 转换为大写。

    例如,配置属性spring.main.log-startup-info 将是一个名为SPRING_MAIN_LOGSTARTUPINFO 的环境变量。

    绑定到对象列表时也可以使用环境变量。要绑定到List,元素编号应在变量名中用下划线括起来。

    例如,配置属性my.service[0].other 将使用名为MY_SERVICE_0_OTHER 的环境变量。

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2021-08-23
      • 2016-11-15
      • 2016-02-12
      • 2016-08-08
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多