Как собрать свойства пружины из нескольких файлов для использования на одном бобе - PullRequest
16 голосов
/ 11 февраля 2009

Я еще не обернулся вокруг весны, так что поправьте меня, если этот вопрос не имеет смысла ...

У меня есть 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}" />
    ...

Мне нужен второй заполнитель, указывающий на другой файл свойств с именем пользователя / паролем, чтобы я мог разделить свойства на два разных файла. Тогда информация о соединении с базой данных может быть отделена от имени пользователя / пароля БД, и я могу контролировать источник одного, а не другого.

Я пытался в основном скопировать rdbmPropertiesPlaceholder с другим идентификатором и файлом и пытаться получить доступ к свойствам, но это не работает.

Этот код взят из проекта веб-портала с открытым исходным кодом uPortal.

Ответы [ 2 ]

28 голосов
/ 11 февраля 2009

Используя эту запись, вы можете указать несколько файлов:

 <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 просто объединяет все это, чтобы выглядело так, будто есть только один, поэтому ваши определения бинов не знают, откуда берутся свойства.

17 голосов
/ 27 ноября 2009

Org.springframework.beans.factory.config.PropertyPlaceholderConfigurer может сделать это (как уже отвечено. Что вы можете сделать, это использовать интервал имен, чтобы вы могли ссылаться на свойства с одинаковыми именами из обоих файлов без Двусмысленность. Для вашего примера, вы можете сделать это:

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

Это сделает ваши контекстные файлы намного чище и понятнее для разработчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...