2011-03-29 59 views
1

我试图使用PropertyPlaceholderConfigurer来读取我的应用程序配置。基本上,WEB-INF/config/config.properties中有第一个配置文件,其中包含另一个属性文件的文件系统位置(以便在应用程序部署或更新期间不会销毁它)。我想有这个成立于servlet-context.xml,但只有第一个作品:无法让PropertyPlaceholderConfigurer以我想要的方式工作

<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)< - 意思是“无法找到文件中指定的路径”

像EL表达式是不工作...我该如何解决这个问题?

+0

我不认为你可以做到这一点。所有的'PropertyPlaceholderConfigurer' bean都被初始化,然后*然后*替换发生。所以他们不能互相指责。 – skaffman 2011-03-29 10:47:53

+2

那么你会如何解决这样的事情? – gotch4 2011-03-29 10:49:03

回答

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,看看是否是你的问题的原因。我从来没有见过像你正在尝试创建两个实例,我猜测这可能是有问题的。

希望这会有所帮助。

0

depends-on="propertyConfigurerInternal"表示propertyConfigurerInternalpropertyConfigurerExternal之前被初始化。

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

所以,你应该看看你的/WEB-INF/config/config.properties看看${baseDataFolder}是否在文件中设置。

相关问题