将传统项目转换为spring引导,而无需更改applicationContext.xml,dispatcher-servlet.xml& tomcat的context.xml

时间:2016-07-22 07:14:38

标签: java spring-mvc tomcat servlets spring-boot

背景&要求是:

  1. 有很多旧项目有一个applicationContext.xml和一个或多个调度程序[-XXX] -servlet.xml。我们希望这些项目在使用spring boot时仍能正常工作(我们开发了部署弹簧启动应用程序的部署工具,但旧项目仍然是手动部署的)。但是,@ SpringBootApplication不能像现在这样构建上下文。我认为,将它们一个一个地重写成代码会花费太多。
  2. 在这些项目中,我们使用扩展的RequestMappingHandlerMapping,因此我们无法使用原生MVC。
  3. 包含jndi定义的tomcat的context.xml由OP维护。我们必须像tomcat一样加载它。
  4. 我无法找到在web.xml中设置的欢迎文件的位置
  5. 我目前正在使用:

    @Configuration
    @ImportResource({"classpath:/applicationContext.xml", "classpath:/dispatcher-servlet.xml"})
    

    那些不使用jndi的简单项目可以启动。

    但正如我的理解,在这种情况下,applicationContext和dispatcher-servlet处于同一级别(dispatcher-servlet应该是applicationContext的子节点,不是吗?)。所以,我甚至无法确保这个工作正常。

1 个答案:

答案 0 :(得分:0)

我们在一年前做了类似的事情,你的设置与我们的设置大致相同,导入这些XML文件就可以了。我们唯一要做的就是确保我们的应用程序类位于不同的包层次结构中,以避免由于其固有的@ComponentScan而导致冲突/重复的bean定义。

在同一个上下文中使用调度程序servlet和应用程序上下文不会导致任何问题 - 是的,调度程序servlet的上下文通常被定义为一个单独的上下文,并且是更广泛的applicationContext的子项,但是大多数人都没有掌握的是如果你的应用程序想拥有多个调度程序servlet,那么这种分离只会很重要,如果有的话,这种情况很少发生。

在多个调度程序servlet的情况下,必须使它们具有不同的WebMVC配置,并且applicationContext允许您在servlet上下文之间共享公共bean和配置,这样您就不必执行相同的操作工作两次。