无法让PropertyPlaceholderConfigurer以我想要的方式工作

时间:2011-03-29 10:44:52

标签: spring configuration

我正在尝试使用PropertyPlaceholderConfigurer来读取我的应用配置。基本上,WEB-INF/config/config.properties中有第一个配置文件,其中包含另一个属性文件的文件系统位置(以便在应用程序部署或更新期间不会销毁它)。我试图在servlet-context.xml中设置此设置,但只有第一个设置有效:

<bean id="propertyConfigurerInternal"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>/WEB-INF/config/config.properties</value>
    </property>
</bean>


<bean id="propertyConfigurerExternal"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    depends-on="propertyConfigurerInternal">
    <property name="location">
        <value>file:${baseDataFolder}/jaccise.conf</value>
    </property>
</bean>

第一个(propertyConfigurerInternal)创建没有问题,但第二个失败如下:

  

org.springframework.beans.factory.BeanInitializationException:无法加载属性;嵌套异常为java.io.FileNotFoundException${baseDataFolder}\jaccise.conf(Impossibile trovare il percorso specificato)&lt; - 表示“无法在指定路径中找到文件”

像EL表达式不起作用......如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>/WEB-INF/config/config.properties</value>
            <value>file:${baseDataFolder}/jaccise.conf</value>
        </list>
    </property>
</bean>

只需使用一个PlaceholderConfigurer,看看是否是导致问题的原因。我从来没有见过像你正在尝试的那样创建两个实例,我猜这可能会有问题。

希望这有帮助。

答案 1 :(得分:0)

depends-on="propertyConfigurerInternal"表示在propertyConfigurerInternal之前初始化propertyConfigurerExternal

并且${baseDataFolder}必须包含在propertyConfigurerInternal的属性文件中(在您的情况下为config.properties),否则无法对其进行解析。

因此,您应该查看/WEB-INF/config/config.properties,看看是否在文件中设置了${baseDataFolder}