1

我正在使用Maven 构建阶段maven-jetty-plugin运行我的 Spring MVC webapp integration-test,并在其上运行各种测试。此时,我希望能够切换出一些 Spring 配置,以便在集成测试期间可以指向不同的 bean 实现。这样我就可以更改要运行的数据库,而不是使用生产连接设置。

我应该考虑什么样的方法?我应该尝试对 servlet-context.xml 文件使用资源过滤吗?我应该有两个不同的配置文件吗?如何让它与 Jetty 插件很好地配合使用?

编辑:我正在考虑使用 Spring 的基于 Java 的@Configuration注释而不是 XML servlet-context 文件,并根据环境变量或类似变量切换我构造的 bean 类型,但这也感觉不对。

4

2 回答 2

1

我会建议使用spring profile+maven过滤:

  1. 在 pom.xml 中定义一个可以通过命令行覆盖的属性:-Dspring.profile.active=development

         <properties>
                <spring.profile.active>test</spring.profile.active>
         </properties>
    
  2. 在 pom.xml 中添加资源过滤。确保您的 web.xml 在目录 src/main/resources 中。

     <resources>  
           <resource>  
             <directory>src/main/resources</directory>  
             <filtering>true</filtering>  
           </resource>  
     </resources> 
    
  3. 激活web.xml中具体的spring profile,过滤后会替换${spring.profile.active}。

    <context-param>  
        <param-name>spring.profiles.active</param-name>  
        <param-value>${spring.profile.active}</param-value>  
    </context-param> 
    
  4. 在 spring 配置文件中定义 bean

    <beans profile="production">  
         <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>  
    </beans>  
    
于 2013-01-23T11:45:08.027 回答
0

以前,我总是创建一个包含 jetty-maven-plugin 配置和集成测试配置的配置文件。

但是当我了解 spring-test-mvc 时,我转而使用它,因为你想在使用 jetty-maven-plugin 的集成测试中实现的一切都可以实现。另外,您可以模拟所需的服务(例如,不同应用程序中的身份验证)。

所以我建议切换到spring-test-mvc。恕我直言,jetty-maven-plugin 风格非常痛苦。

于 2013-01-20T16:21:41.010 回答