Странное поведение с конфигурацией Spring и профилями Maven - PullRequest
3 голосов
/ 02 февраля 2012

У меня странное поведение при работе с тегом Maven <filter> и Spring-конфигами.Насколько я понимаю, конфигурация Spring - это простой XML-файл для Maven, но у меня возникают проблемы с тегом <context:component-scan base-package="com.xyz"/>.Тестовый XML-файл имеет следующий вид

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:jee="http://www.springframework.org/schema/jee" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"
    default-autowire="byName">

    <!-- Import the DataSource configurations -->
    <import resource="classpath:spring/MyDataSource.xml"/>

   <!--  Property File location --> 
   <context:property-placeholder location="${ext.properties.dir}"/>


    <!--The services are auto-detected POJOs labeled with the @Service annotation.-->
<context:component-scan base-package="com.xyz"/>

</beans>

, а конфигурация профилей Maven указана ниже

<build>
   .....
   <resources>
    <resource>
        <directory>src/main/resources</directory>               
        <filtering>true</filtering>
    </resource>
   </resources>
<filters>
    <filter>src/main/resources/build/build-${environment}.properties</filter>
</filters>
</build>

<profiles>
    <profile>
        <id>uat</id>
        <activation>
            <property>
                <name>env</name>
                <value>uat</value>
            </property>
        </activation>
        <properties>
                <environment>uat</environment>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <activation>
            <property>
                <name>env</name>
                <value>prod</value>
            </property>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
                <environment>prod</environment>
        </properties>
    </profile>
</profiles>

Содержимое файла build-dev.properties:

ext.properties.dir=file:///C:/Temp/myProp.properties

Myпроблема заключалась в том, что фильтрация профиля Maven не работала, а свойство ${ext.properties.dir} не заменялось в процессе упаковки.Он заявил, что работает, когда я удалил тег <context:component-scan base-package="com.xyz"/> и, следовательно, поместил его под свойством, которое необходимо отфильтровать.Теперь все работает отлично.У меня вопрос в чем проблема с <context:component-scan base-package="com.xyz"/>?

1 Ответ

4 голосов
/ 02 февраля 2012

Я не думаю, что <context:component-scan base-package="com.xyz"/>, но комментарий выше

<!--The services are auto-detected POJOs labeled with the @Service annotation.-->

* @ имеет особое значение в maven fitlers .

БытьЧестно говоря, у меня есть ощущение, что синтаксис между файлами конфигурации Spring и фильтрами maven перекрывают друг друга.Мое «решение» - использовать (как можно дольше) два файла для конфигурации пружины.

  • Файл свойств, которым манипулируют фильтры пружины
  • обычный файл конфигурации Spring(с заполнителями), который использует конфигуратор PropertyPlaceholder для загрузки файла свойств.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...