我正在使用maven-jetty-plugin
在Maven构建的integration-test
阶段运行我的Spring MVC webapp,并对其进行各种测试。在这一点上,我希望能够切换出一些Spring配置,这样我就可以在集成测试期间指出不同的bean实现。这样我就可以更改要运行的数据库,而不是使用生产连接设置。
我应该考虑采用哪种方法?我应该尝试在servlet-context.xml文件上使用资源过滤吗?我应该有两个不同的配置文件吗?如何让它与Jetty插件很好地配合使用?
编辑:我正在考虑使用Spring的基于Java的@Configuration
注释优先于XML servlet-context文件,并根据环境变量切换我构建的bean类型或类似,但这也感觉不对。
答案 0 :(得分:1)
我建议使用spring profile + maven过滤:
在pom.xml中定义一个可以通过命令行覆盖的属性:-Dspring.profile.active = development
<properties>
<spring.profile.active>test</spring.profile.active>
</properties>
在pom.xml中添加资源过滤。确保您的web.xml位于目录src / main / resources中。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
激活web.xml中的特定spring配置文件,$ {spring.profile.active}将在过滤后被替换。
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>${spring.profile.active}</param-value>
</context-param>
在spring profile中定义bean
<beans profile="production">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
</beans>
答案 1 :(得分:0)
以前,我总是创建一个包含jetty-maven-plugin配置和集成测试配置的配置文件。
但是当我了解spring-test-mvc时,我转而使用它,因为你想在使用jetty-maven-plugin的集成测试中实现的一切都可以实现。此外,您可以模拟所需的服务(例如,在不同的应用程序中进行身份验证)。
所以我建议切换到spring-test-mvc。恕我直言,jetty-maven-plugin风格非常痛苦。