PropertyPlaceholderConfigurer vs Filters - Spring Beans - PullRequest
2 голосов
/ 03 мая 2010

У меня есть вопрос относительно разницы между PropertyPlaceholderConfigurer (org.springframework.beans.factory.config.PropertyPlaceholderConfigurer) и обычными фильтрами, определенными в моем pom.xml.

Я смотрел на примеры, и кажется, что даже если фильтры определены и помечены как активные по умолчанию в pom.xml, они все еще используют PropertyPlaceholderConfigurer в приложении SpringContext.xml.

Это означает, что pom.xml имеет ссылку на filter-LOCAL.properties, тогда как applicationContext.xml имеет ссылку на application.properties, и они оба содержат одинаковые настройки.

Почему это? Это то, как это должно быть сделано? Я могу выполнить цель mvn jetty: запустить без наличия application.properties, но если я добавлю в application.properties настройки, которые отличаются от filter-LOCAL.properties, они, похоже, не переопределяют.

Вот пример того, что я имею в виду:

pom.xml

    <profiles>  
        <profile>  
            <id>LOCAL  
            <activation>  
                <activeByDefault>true  
            </activation>   
            <properties>  
                <env>LOCAL  
            </properties>  
        </profile>  
    </profiles>

applicationContext.xml

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:application.properties
            </list>
        </property>
        <property name="ignoreResourceNotFound" value="true"/>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

пример содержимого application.properties и filters-LOCAL.properties

jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/shoutbox_dev
jdbc.username=tester
jdbc.password=tester

Могу ли я удалить propertyConfigurer из applicationContext, создать фильтр PROD и игнорировать файл application.properties, или это вызовет проблемы при развертывании на рабочем сервере?

Ответы [ 2 ]

2 голосов
/ 04 мая 2010

Кстати, вот что написал автор серии блогов, за которой следит ОП, этот комментарий :

Раньше я был большим поклонником Spring PropertyPlaceholderConfigurer но с тех пор, как я начал использовать maven, я не нахожу его столь же полезным, как фильтры maven, используя либо файл фильтров, как описано здесь, либо наличие нескольких профилей в pom для различных слоев развертывания, где каждый профиль задает свойства.

Самым большим недостатком PropertyPlaceholderConfigurer является то, что у вас может быть только один PropertyPlaceholderConfigurer боб.И это не очень хорошо задокументировано.

С файлами фильтров maven вы можете иметь сколько угодно.

Другая причина, по которой я предпочитаю фильтры maven, заключается в том, что с ними вы можете сделать «пакет mvn».а затем покопаться в целевом каталоге и посмотреть на отфильтрованные файлы конфигурации и посмотреть, что он сделал.В Spring 101 * вы не узнаете, что было подставлено, пока приложение не будет запущено.

Я придерживаюсь этого мнения и предпочитаю использовать фильтр с использованием PropertyPlaceholderConfigurer и плагина Antrun для копирования.скажите test.properties в application.properties при запуске моих тестов.А использование отфильтрованных ресурсов хорошо поддерживается всеми основными IDE (Eclipse, IntelliJ, NetBeans), поэтому я не понимаю, почему мне не следует его использовать.

2 голосов
/ 03 мая 2010

Вы должны использовать Maven, чтобы выбрать, какой файл свойств Spring использовать в зависимости от среды, для которой вы создаете.

Когда вы тестируете в своей среде IDE, вы должны просто запустить контейнер Spring из теста, не используя Maven ни для чего другого, кроме управления своими зависимостями.

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