У меня возник вопрос о различии между PropertyPlaceholderConfigurer (org.springframework.beans.factory.config.PropertyPlaceholderConfigurer) и нормальными фильтрами, определенными в моем pom.xml.PropertyPlaceholderConfigurer vs Filters - Spring Beans
Я смотрел примеры, и кажется, что, хотя фильтры определены и отмечены как активные по умолчанию в pom.xml, они все еще используют PropertyPlaceholderConfigurer в приложении SpringContext.xml Spring.
Это означает, что 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 и фильтры -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, или которые дают мне выдает при развертывании на сервере?
У вас есть предложение, чтобы узнать, как использовать Maven для выбора свойств пружины, как вы предложили? – John
@John: Лично я предпочитаю плющ и муравей, но принципы должны быть одинаковыми. В зависимости от того, для какой среды я создаю, я копирую другой файл свойств и переименовываю его, например, в application.properties. Тогда контекст приложения Spring, который импортирует PropertyPlaceholderConfigurer, знает только о application.properties. Если это скопировано из test.properties или production.properties, не указано для контейнера Spring. Только мои тестовые контексты знают о свойствах теста для моих тестов JUnit. – Espen
-1 - создание отдельных экземпляров вашего развертывания для каждой среды - плохая идея. Он не масштабируется хорошо, и вам в конечном итоге придется взломать открытую войну, чтобы увидеть, какие свойства включены. См. Мой ответ здесь для альтернативного подхода: http://stackoverflow.com/questions/1311360/property-placeholder-location-from-another-property/1312341#1312341 – Pablojim