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

标签 java spring spring-boot

我有一个如下所示的 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 - Android 应用程序混淆(Webserver-Pinging | 获取 + 保存数据 (MySQL))

java - WaveData LWJGL3

java - Spring Data PageImpl 没有返回正确大小的页面?

java - 使用 <c :import> with spring views 的可能性

java - 如何在运行时切换 Spring 配置文件

java - jsp 页面中的 HTML 无效

java - UserTransaction 如何传播?

java - Spring 4 Spring Security 3.2.2 未定义名为 'springSecurityFilterChain' 的 bean

java - 如何为所有 Controller 配置默认的@RestController URI 前缀?

spring-boot - Consul 键值对用于 Spring-boot 中的配置