2009-02-10 26 views
16

我没有得到我的头缠着春还,所以纠正我,如果这个问题没有意义......如何收集一个bean从使用多个文件春天性质

我有一个PropertyPlaceholderConfigurer

<bean id="rdbmPropertiesPlacholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> 
    <property name="location" value="classpath:/properties/rdbm.properties" /> 
</bean> 

而且我有一个bean被注入我猜?

<bean id="PortalDb" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${hibernate.connection.driver_class}" /> 
    <property name="url" value="${hibernate.connection.url}" /> 
    <property name="username" value="${hibernate.connection.username}" /> 
    <property name="password" value="${hibernate.connection.password}" /> 
    ... 

我想要的是第二个占位符指向与用户名/密码不同的属性文件,以便我可以将属性拆分为两个不同的文件。然后,数据库连接信息可以与db用户名/密码分开,并且我可以控制一个而不是另一个。

我试过基本上复制rdbmPropertiesPlaceholder与不同的id和文件,并试图访问属性,但它不起作用。

此代码来自uPortal开放源代码门户网站项目。

+0

另请参阅http://stackoverflow.com/questions/686635/is-it-possible-to-have-multiple-propertyplaceholderconfigurer-in-my-applicationc – Vadzim 2013-12-06 19:13:58

回答

28

使用这个符号,您可以指定多个文件:

<bean id="rdbmPropertiesPlacholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> 
    <property name="locations"> 
     <list> 
      <value>classpath:/properties/rdbm.properties</value> 
      <value>classpath:/properties/passwords.properties</value> 
     </list> 
    </property> 
</bean> 

的propertyplaceholderconfigurerer刚刚合并所有这些看起来像只有一个,所以你的bean定义,不知道哪里的性质从何而来。

+0

该语法看起来不错,但它似乎没有加载我的第二个文件。不知道发生了什么... – 2009-02-10 21:56:59

+0

好的,所以我想我已经想通了。同样的事情在两个地方完成,但它似乎只对我没有看到的那个有影响。谢谢,我认为这固定了它! – 2009-02-10 22:09:52

17

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer可以做到这一点(正如已经回答的那样,你可能想要做的是利用名字间距,这样你就可以从这两个文件中引用同名属性。没有ambiquity对于你的榜样,你可以这样做:

<bean id="generalPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:/properties/general.properties"/> 
</bean> 

<bean id="db.PropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:/properties/rdbm.properties" /> 
    <property name="placeholderPrefix" value="$db{" /> 
    <property name="placeholderSuffix" value="}" />  
</bean> 

在您的上下文文件,你现在可以参考一般性质与$ {someproperty},并参考RDBM与$ DB属性{someproperty }

This将使您的上下文文件对开发人员更清晰和更清晰。