2014-10-14 2 views
2

Я хочу создать профили для различных баз данных, которые я могу загрузить, в зависимости от того, какой я использую.Spring datasources multiple profiles

Это моя соответствующая часть моего файла приложения context.xml:

<beans> 

     <!-- ...other beans in common profile--> 
     <beans profile="dev"> 
      <bean id="dataSource" 
        class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
       <property name="driverClassName" value="${db.driverClassName}"/> 
       <property name="url" value="${db.url}"/> 
       <property name="username" value="${db.username}"/> 
       <property name="password" value="${db.password}"/> 
      </bean> 
      <beans profile="mariadb"> 
       <context:property-placeholder location="classpath*:databases/mariadb.properties" 
         ignore-unresolvable="true"/> 
      </beans> 
      <beans profile="mysql"> 
       <context:property-placeholder location="classpath*:databases/mysql.properties" 
         ignore-unresolvable="true"/> 
      </beans> 
      <beans profile="hsql"> 
       <context:property-placeholder location="classpath*:databases/hsql.properties" 
         ignore-unresolvable="true"/> 
      </beans> 
     </beans> 

     <beans profile="production"> 
      <jee:jndi-lookup id="dataSource" jndi-name="${jndi.name}"/> 
     </beans> 

Мой диспетчеру-servlet.xml

<beans> 
    <mvc:default-servlet-handler/> 
    <import resource="classpath*:profile-context.xml"/> 
    <mvc:annotation-driven/> 
<beans/> 

и профиль-context.xml

<beans> 
    <beans profile="dev"> 
     <import resource="application-context.xml"/> 
    </beans> 

    <beans profile="production"> 
     <import resource="application-context.xml"/> 
    </beans> 
<beans/> 

, наконец, моя web.xml

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>spring.profiles.active</param-name> 
     <param-value>dev, mysql</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Хотя это будет работать позволяет говорить с JUnit тестов с @ActiveProfile ({ "разработчика", "MySQL"}) он не работает для моего контейнера Tomcat. Могу ли я сделать что-то неправильно в том, как я обертываю контекст приложения в профиле dev в контексте профиля?

ответ

1

Весна анализирует значение spring.profiles.active с использованием StringUtils. commaDelimitedListToStringArray. Этот метод не очень прощающий и анализирует вашу строку профиля как {"dev", " mysql"} - отметьте пробел перед mysql.

Удалите пробел после запятой из вашего элемента param-value, и ваш код должен работать.