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

Eng*_*_DJ 14 java spring spring-boot

我想hibernate.format_sql在Spring Boot应用程序中设置.我想使用环境变量来设置它.

Spring Boot相当轻松地将所有环境变量从例如Spring内容中FOO_BAR_BAZ调用foo.bar.baz的属性转换为.

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

Max*_*Max 24

这是一个老问题,但我会回答它,以防其他人(像我一样)最终在这里寻找这些信息.

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
Run Code Online (Sandbox Code Playgroud)

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

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

logging:
  level:
    org.springframework.core.env: DEBUG
Run Code Online (Sandbox Code Playgroud)

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

  • 这并不能回答问题。问题是关于“hibernate.format_sql”,但由于某种原因,这个答案假定“hibernate.format.sql” (4认同)