Spring PropertyPlaceholderconfigurer和PropertyOverrideConfigurer之间的行为差​​异

时间:2017-08-25 05:27:29

标签: spring

我想外部化我计划使用的配置属性 - PropertyPlaceholderconfigurer - 这是我的上下文文件:

<bean id="helloBean" class="com.springex1.HelloWorld">
    <property name="name" value="test!{my.db.jdbc.driver}" />
</bean>

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="testPropertyConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="location" value="classpath:/springdb.properties"/>
    <property name="placeholderPrefix" value="test!{"/>
    <property name="placeholderSuffix" value="}"/>
    <property name="order" value="0"/>
</bean>

简单的java类 - HelloWorld.java

public class HelloWorld {
private String name;

public void setName(String name) {
    this.name = name;
}

public void printHello() {
    System.out.println("Hello ! " + name);
}

我的属性文件:

my.db.jdbc.driver=xyz
foo=bar

所有这一切都很好。请注意,第一个属性正在注入

  

my.db.jdbc.driver = XYZ

而第二个属性

  

富=酒吧

没有被使用 - 但春天工作正常并且没有抱怨

现在我决定覆盖属性 - 所以决定添加propertyOverrideConfigurer

<bean id="propertyOverrideConfigurer"
    class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
    <property name="location" value="classpath:/override.properties" />
    <property name="order" value="20" />
</bean>

添加了override.properties:

  

helloBean.name = oracle.jdbc.OracleDriver

这可以按预期工作并打印 - oracle.jdbc.OracleDriver

现在我的理解是我想覆盖附加属性

  

富=巴兹

然后代码失败:

  

线程“main”中的异常org.springframework.beans.factory.BeanInitializationException:无法在PropertyOverrideConfigurer中处理键'foo';嵌套异常是org.springframework.beans.factory.BeanInitializationException:无效的键'foo':期望'beanName.property'

这部分是可以理解的 - spring正在寻找bean名称'helloBean',然后是相应的属性。

虽然这个问题被理解了 - 我的问题是 - 在PropertyPlaceholderConfigurer中,我可以定义未注入的其他属性,并且它可以正常工作。 但是 - PropertyOverrideConfigurer - 定义的任何属性必须被注入并且为此发生 - 必须有一个可用属性的bean

在PropertyOverrideConfigurer的情况下,我真的没有其他属性 - 这听起来不对。

我错过了可以忽略此错误的内容吗?

0 个答案:

没有答案