gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:56:31 40 4
gpt4 key购买 nike

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

Spring Boot 可以轻松地将所有环境变量从例如 FOO_BAR_BAZ 转换为 Spring 上下文中名为 foo.bar.baz 的属性。

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

最佳答案

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

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

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

编辑:我强烈建议您熟悉相关的 Spring Boot 文档主题: https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

对于此处评论中更棘手的示例,例如spring.jpa.properties.hibernate.criteria.literal_handling_mode,根据您启动应用程序的方式,可能会有不同的解决方案。

您可以将变量设置为 JSON,嵌入到环境变量中。

env SPRING_APPLICATION_JSON='{"spring":{"jpa":{"properties":{"hibernate":{"criteria":{"literal_handling_mode":"BIND"}}}}}}' ./gradlew bootRun

按原样设置变量也可能有效:

env spring.jpa.properties.hibernate.criteria.literal_handling_mode=BIND ./gradlew bootRun

只要我能够以这种方式在正在运行的 Spring Boot 应用程序中获取值,以上两种方法都适用于我的设置:

@Value("${spring.jpa.properties.hibernate.criteria.literal_handling_mode}")
private String testSettingThroughEnvVariable;

希望这会有所帮助! YMMV

关于java - 如何通过环境变量设置名称中带有下划线的 Spring Boot 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178556/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com