这是一个老问题,但我会回答它,以防其他人(像我一样)最终在这里寻找这些信息。
HIBERNATE_FORMAT_SQL应该做到这一点
实际上,“翻译”的不是操作系统环境变量,而是Spring属性名称。
该名称以多种方式进行转换,并根据可用的环境变量进行查找。例如,“hibernate.format.sql”被查找为:
- hibernate.format.sql (按原样)
- hibernate_format_sql(用下划线替换点)
- hibernate_format_sql(用下划线替换破折号,在你的情况下是一样的)
- hibernate_format_sql(用下划线替换破折号和点,在你的情况下是一样的)
然后与大写字母相同:
- 冬眠。格式。SQL(按原样)
- HIBERNATE_FORMAT_SQL(用下划线替换点)
- HIBERNATE_FORMAT_SQL(用下划线替换破折号,同样如此)
- HIBERNATE_FORMAT_SQL(用下划线替换破折号和点,同样如此)
虽然不能使用 set 或 导出 命令设置名称中带有点的环境变量,但使用 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;
希望这有帮助!断续器