0

简介
目前我正在使用一个基于 Spring 的 webapp,其中我们有两个不同的 DAO bean 实现:

  • 一个真正的 DB 访问实现(基于 JDBC 从 DB 中检索数据)。
  • 一个测试实现(其中每个方法都返回假数据)。

    这些实现是使用 applicationContext 文件映射的(我们有两个,上面描述的每种情况一个)。使用其中一个的方法是拥有两个不同的 web.xml 文件,并让第二个文件(例如“web-test.xml”)包含以下内容:

    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:{...}/applicationContext-test.xml</param-value>
    </context-param>
    

    在jetty插件的配置中,我们可以覆盖web.xml:

    <webAppConfig>
     <contextPath>/${projectName}-test</contextPath>
     <overrideDescriptor>${basedir}/web/WEB-INF/web-test.xml</overrideDescriptor>
    </webAppConfig>
    

    这适用于使用一个 applicationContext另一个,但我们需要在集成测试期间同时使用这两者,因为一些测试需要数据库访问,而其他测试需要使用假数据。

    问题
    是否可以定义多个 webAppConfigs,以便我们可以根据使用的 contextPath 使用“web.xml”或“web-test.xml”?
    我们想区分访问不同 url 的两种情况,例如:

  • localhost:8080/myWebApp(用于真正的数据库访问)
  • localhost:8080/myWebApp-test(用于假数据模拟)

    我们在 pom.xml 上尝试了这样的事情:

    <webAppConfig>
     <contextPath>/${projectName}</contextPath>
    </webAppConfig>
    
    <webAppConfig>
     <contextPath>/${projectName}-test</contextPath>
     <overrideDescriptor>${basedir}/web/WEB-INF/web-int-test.xml</overrideDescriptor>
    </webAppConfig>
    

    但结果是 webAppConfig 被第二个定义覆盖。有没有办法通过同一个 Jetty 实例访问这两个上下文?

    预先感谢您的帮助。

  • 4

    0 回答 0