gpt4 book ai didi

java - .properties 文件中的 PropertyPlaceholderConfigurer 和环境变量

转载 作者:IT老高 更新时间:2023-10-28 13:53:22 24 4
gpt4 key购买 nike

我有一个带有 PropertyPlaceholderConfigurer 的 Spring application-context.xml,用于从 .properties 文件中获取属性值。主要和测试源文件夹具有单独的 .properties 文件。问题是我需要在 .properties 文件中使用环境变量。但是当我按照以下方式进行操作时:

property.name=${env.SYSTEM_PROPERTY}

我收到以下错误:

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'beanName' defined in class path resource [com/example/applicationContext.xml]: Could not resolve placeholder 'env.SYSTEM_PROPERTY'

而占位符配置器定义为

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:com/example/application.properties"/>
</bean>

任何想法如何使 property.name 被解释为环境变量(而不是占位符)?

最好的问候,德米特里。

最佳答案

我可能会彻底改变解决方案:直接注入(inject)系统属性,而不是注入(inject)引用系统属性的属性

例如

@Value("#{ systemProperties['JAVA_MY_ENV'] }") 
private String myVar;

<property name ="myVar" value="#{systemProperties['JAVA_MY_ENV']}"/>

我使用这样的属性占位符配置器

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:someprops.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true" />
<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

您还必须记住使用

将参数传递到程序中
 -DJAVA_MY_ENV=xyz

这样,当您运行生产版本时,您可以传递一件事,而在运行测试时传递另一件事。

我经常做的事情是这样的:

  <property name="locations">
<list>
<value>classpath:someprops.properties</value>
<value>classpath:someprops-{environment}.properties</value>
</list>
</property>

其中环境是 prod/stage/test/int/ci/local(每个环境 1 个 - 您现在可能只有 2 或 3 个)。您可以将环境变量传递给程序。无论其在本地 pc/tests 上的生产/运行是否在 someprops.properties 属性文件中,任何应该相同的属性。任何特定于环境/运行方式的文件都将放入更具体的文件中(您应该将其放入 someprops.properties 文件以及默认值,除非被覆盖机制)

例如在类路径中:someprops.properties

url=www.mysite.com

在类路径中:someprops-local.properties

url=localhost

通过使用这个基本思想,您可以以干净的方式分离测试和程序的正常运行属性。

关于java - .properties 文件中的 PropertyPlaceholderConfigurer 和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324702/

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