有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从多个文件中收集spring属性,以便在单个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 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}" />
    ...

我想要的是第二个占位符,它指向一个不同的属性文件,带有用户名/密码,这样我就可以将属性拆分为两个不同的文件。然后数据库连接信息可以与数据库用户名/密码分开,我可以对其中一个进行源代码控制,而不是另一个

我尝试过用不同的id和文件复制rdbmPropertiesPlaceholder,并尝试访问这些属性,但没有成功

这段代码来自uPortal开源门户网站项目


共 (2) 个答案

  1. # 1 楼答案

    使用此符号可以指定多个文件:

     <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>
    

    PropertyPlaceHolderConfigurer只是合并了所有这些,看起来只有一个,所以您的bean定义不知道属性来自哪里

  2. # 2 楼答案

    组织。springframework。豆。工厂配置。PropertyPlaceHolderConfigure可以做到这一点(正如已经回答的那样)。您可能想做的是利用名称间距,以便可以从两个文件中引用相同的命名属性,而不会产生歧义。例如,您可以做到:

    <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}引用常规属性,并使用$db{someproperty}引用rdbm属性

    这将使您的上下文文件对开发人员更加清晰