gpt4 book ai didi

java - Spring 值注入(inject) - 如果没有环境变量则默认为文件中的系统属性

转载 作者:行者123 更新时间:2023-11-30 06:18:07 24 4
gpt4 key购买 nike

我正在寻找一种将环境变量的值注入(inject) pojo 的巧妙方法,但使用默认值来设置环境变量。我知道这种语法:

@Value("#{systemProperties['JDBC_CONNECTION_STRING'] ?: \"jdbc:mysql://localhost:3306/mydb?user=root\"}")

但这意味着我必须在 java 文件中对默认值进行硬编码。我更愿意将它放在属性文件中。可能吗?

我需要这个,因为在 AWS EBS 上,环境变量是传递属性的唯一方式,但我们不仅仅部署在那里。在其他地方我想从文件中读取 Prop 。

最佳答案

在您的 spring.xml 配置文件中添加以下内容:

<context:property-placeholder order="-50"/>

然后

<context:property-placeholder order="0" location="classpath:x.y.z/application.properties"/>      

第一个属性占位符将从系统属性加载所有值,第二个将从属性文件加载。

请注意系统属性的顺序如何比应用程序属性少一,因此系统属性优先。

现在在你的类文件中你只需这样做:

@Value("${JDBC_CONNECTION_STRING}")
private String jdbcConnectionString

如果系统属性存在,它将从系统属性中注入(inject)值;如果系统属性中不存在,它将从应用程序属性中注入(inject)值。

我还喜欢做的是从 S3 加载另一个属性文件,它的顺序介于上述两个之间,这样我就可以覆盖默认值。

关于java - Spring 值注入(inject) - 如果没有环境变量则默认为文件中的系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25163335/

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