一尘不染

如何通过环境变量设置名称中带有下划线的Spring Boot属性?

spring-boot

我想hibernate.format_sql在Spring Boot应用中设置。我想使用环境变量进行设置。

Spring Boot可以轻松地将所有环境变量从(例如)转换为在Spring上下文内部FOO_BAR_BAZ调用foo.bar.baz的属性。

如何在Spring
Boot中使用环境变量在目标名称中设置带下划线的属性?想必HIBERNATE_FORMAT_SQL会被翻译成hibernate.format.sql


阅读 1135

收藏
2020-05-30

共1个答案

一尘不染

这是一个古老的问题,但是如果其他人(例如我)最终在这里寻找此信息,我会回答。

HIBERNATE_FORMAT_SQL应该可以解决问题

实际上,不是“翻译” OS环境变量,而是“ Spring”属性名称。

该名称以几种方式转换,并根据可用的环境变量进行查找。例如,“ hibernate.format.sql”查找为:

  1. hibernate.format.sql(原样)
  2. hibernate_format_sql(用下划线代替点)
  3. hibernate_format_sql(用下划线代替短划线,与您的情况相同)
  4. hibernate_format_sql(用下划线代替短划线,在您的情况下相同)

然后与大写相同:

  1. HIBERNATE.FORMAT.SQL(原样)
  2. HIBERNATE_FORMAT_SQL(用下划线代替点)
  3. HIBERNATE_FORMAT_SQL(短划线替换为下划线,再次相同)
  4. HIBERNATE_FORMAT_SQL(点划线替换为下划线,再次相同)

尽管不能使用set或export命令在名称中设置带点的环境变量,但是可以使用env命令。我推迟判断这是否是一个好主意:

env "my.dotted.name=\"a value\"" the-command-you-want-to-run

有关详细信息,请查看SystemEnvironmentPropertySource.java。我链接到特定版本,但您应确保查看所使用的版本。

要解决生产环境中的这类问题,您可以尝试为属性解析代码打开调试日志记录:

logging:
  level:
    org.springframework.core.env: DEBUG

…或通过设置适当的环境变量:)

2020-05-30