【问题标题】:Convert traditional projects to spring boot, without changing applicationContext.xml, dispatcher-servlet.xml & tomcat's context.xml将传统项目转换为spring boot,无需更改applicationContext.xml、dispatcher-servlet.xml & tomcat的context.xml
【发布时间】:2016-11-25 23:57:09
【问题描述】:

背景和要求是:

  1. 有很多老项目都有一个applicationContext.xml和一个或多个dispatcher[-XXX]-servlet.xml。我们希望这些项目在使用 spring boot 时仍然可以工作(我们开发了一个部署工具来部署 spring boot 应用程序,但旧项目仍然是手动部署的)。但是,@SpringBootApplication 无法按原样构建上下文。而且我认为将它们一一重写成代码的成本太高了。
  2. 在那些项目中,我们使用扩展的 RequestMappingHandlerMapping,所以我们不能使用原生 MVC。
  3. tomcat 的 context.xml 包含 jndi 定义,由 OP 维护。我们必须像 tomcat 一样加载它。
  4. 我找不到在哪里设置欢迎文件,这是在 web.xml 中设置的

我目前正在使用:

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

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

但据我了解,在这种情况下,applicationContext 和 dispatcher-servlet 处于同一级别(dispatcher-servlet 应该是 applicationContext 的子级,不是吗?)。所以,我什至不能确保这个能正常工作。

【问题讨论】:

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


    【解决方案1】:

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

    在同一上下文中拥有调度程序 servlet 和应用程序上下文不会导致任何问题 - 是的,调度程序 servlet 的上下文通常被定义为一个单独的上下文,并且是更广泛的 applicationContext 的子级,但大多数人无法理解的是只有当您的应用程序想要拥有多个调度程序 servlet 时,这种分离才重要,如果曾经有的话,这种情况已经很少发生了。

    如果有多个调度器 servlet,必须使它们具有不同的 WebMVC 配置,而 applicationContext 允许您在 servlet 上下文之间共享公共 bean 和配置,这样您就不必做同样的事情工作两次。

    【讨论】:

      猜你喜欢
      • 2014-04-27
      • 2014-04-11
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2011-04-08
      • 2019-02-18
      • 2019-12-16
      相关资源
      最近更新 更多