gpt4 book ai didi

java - PropertyPlaceholderConfigurer + PropertiesFactoryBean 只解析位置属性

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:49 24 4
gpt4 key购买 nike

我无法让 PropertyPlaceholderConfigurer 在我当前的配置中工作。在我的 applicationContext.xml 中给出以下代码块:

<bean id="myProperties" 
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<!-- Order matters, last one to create a property wins! -->
<value>classpath:default.properties</value>
<value>file:${MYAPP_PROPERTIES_LOCATION:badurl}/application.properties</value>
<value>file:${user.home}/developer.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertiesPlaceholderConfigurer">
<property name="properties" ref="myProperties"/>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="searchSystemEnvironment" value="true"/>
</bean>

然后在 default.properties 文件中我有以下内容(这些是测试属性):

property1=prop1val
property2=${property1}

工作原理:propertyConfigurer 正确解析了环境变量 MYAPP_PROPERTIES_LOCATION 和系统变量 user.home。然而,最终的属性对象是由工厂 bean 创建的,生成的属性是 [property1=prop1val, property2=${property1}]

使用此配置,我如何获取 myProperties bean 中的属性来解析它们的占位符?我已经做了大量研究以包括跟踪 spring 代码 - 我可以看到如何和为什么没有这样做。我希望有一些我只是想念的设置!这是我的第一篇文章,所以请放轻松 :)

最佳答案

您已正确配置 spring 和属性文件。这就是为什么您能够从文件中读取数据的原因。 spring 所做的一切都是正确的,让我再解释一下....

正如您在下面所说的是您的属性(property)文件,

property1=prop1val
property2=${property1}

请记住,它是一个带有键值对的漂亮文本文件,不能带变量。在这里,如果您打算动态地将 property1 的值复制到 property2,则不会发生这种情况。这不是我们应该使用属性文件的方式。

属性文件应该是带有键值对的简单文本文件。因此,保持键的原子性,以便您可以从应用程序或在您的 applicationcontext.xml 文件中逻辑构造所需的数据。

关于java - PropertyPlaceholderConfigurer + PropertiesFactoryBean 只解析位置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10414419/

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