我想在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”向上查找为:
则大写相同:
虽然不能使用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
问题内容: 我需要动态设置JS对象属性名称。 结果应为: 问题答案:
问题内容: 我正在尝试设置脚本以增加Xcode项目的内部版本号。我进行了一次API调用以获取当前的内部版本号,然后我希望对其进行递增,然后将该新的版本号用作环境变量,以便Xcode插件可以使用它。 我安装了EnvInject插件,但是我不知道如何将var从我的shell脚本中获取到环境变量中。 这设置为我需要的值,但是如何将其分配给环境变量,以便以后在工作中访问它? 问题答案: 添加一个构建步骤以
问题内容: 我们使用spring 3.1的新环境配置文件功能。当前,我们通过在将应用程序部署到的服务器上设置环境变量spring.profiles.active = xxxxx来设置活动配置文件。 我们认为这是次优的解决方案,因为我们要部署的war文件应该只具有一个附加的属性文件,该文件设置了应加载spring应用上下文的环境,因此部署不依赖于服务器上设置的某些环境变量。 我试图弄清楚该怎么做,发
带有Spring-Data的JPA对名称中带有下划线“_”的属性有问题吗?这是我扩展的接口: 这一行:<code>findByA_my_table_id(长头id) 给出此错误: 无效的派生查询!没有为类型 MyClass 找到属性“a”! 如果我将方法命名为< code > public my class find bya _ my _ table _ id(Long header id);它给
我有一个values.yaml,我将一个值存储在一个属性中,还有一个deployment.yaml,我尝试将该值赋给一个环境变量。问题是属性名包含破折号,并抛出以下错误消息。 “空值”是因为我试图将名称引用为 {{ Values.security.enablemockservice | 引号 }},而不使用缓行绑定的破折号,但实际的属性名称是 Values.security.enable-mock
问题内容: 运行将返回“ Clear Workspace = true”。如何在bash中访问它?仅供参考,它来自Jenkins Parameterized Build参数名称。似乎不起作用。 而且,詹金斯怎么能创建这个环境变量?在bash中运行显然不起作用,因为它尝试使用参数“ Workspace = true”运行“ Clear”命令。 我当然可以将作业参数名称设置为Clear_Workspa