【问题标题】:run spring boot application in spring mvc application在spring mvc应用程序中运行spring boot应用程序
【发布时间】:2023-03-16 19:34:01
【问题描述】:

我尝试在 spring mvc 中运行 spring boot 应用程序 通过在spring mvc pom中添加spring boot app依赖 并扫描 spring boot 包 但我面临以下问题

    ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name anonymousFavouriteController: Unsatisfied dependency expressed through field batchFileUploadService; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name batchFileUploadServiceImpl: Unsatisfied dependency expressed through field uploadedFilesRepo; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [.bup.repository.UploadedFilesRepo]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

【问题讨论】:

  • 能否请您粘贴 pom 和完整的堆栈跟踪。
  • @joemokenela 错误更新
  • 4.3.3.RELEASE
  • 我不明白,如何在 spring mvc 内部运行 spring boot 应用程序。如果问题是关于在单个 Web 应用程序中运行多个 Spring 上下文,我们需要更多信息,而不是错误消息。
  • 我有 spring mvc 应用程序和 spring boot 应用程序,我需要在 spring mvc 应用程序中使用 spring boot 应用程序,我在 spring mvc 应用程序中添加了 spring boot 应用程序依赖项并且我使用了它但是当我使用服务层时(spring boot app)在spring mcv中我遇到了上面的错误@30thh

标签: java spring-boot spring-mvc


【解决方案1】:

您在单个应用程序中有多个 Spring 上下文。这通常是一种合法的配置,但对于复杂的应用程序(而 MVC 应用程序总是复杂的),让两者都运行肯定不容易。

我发现至少有两个问题:

组件扫描 两个应用程序都会扫描包并查找属于该应用程序的类。您必须检查包列表不重叠。

DispatcherServlet 每个应用程序都会尝试注册自己的调度程序 servlet。您只需将每个 servlet 映射到不重叠的选定路径。


Spring MVC 和 Spring Boot 可以通过多种不同的方式进行配置。它可以通过web.xml、注释、Spring XML 描述符和所有这些方法的最疯狂组合来完成。我将开始使用web.xml 进行配置。像这样的:

<servlet>
    <servlet-name>app1</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/dispatcher-config-app1.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>app2</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/dispatcher-config-app2.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>app1</servlet-name>
    <url-pattern>/app1/*</url-pattern>
</servlet-mapping>

<!-- All other urls go to "app2" -->
<servlet-mapping>
    <servlet-name>app2</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

两个指定的 XML 描述符都必须定义要扫描两个应用程序的包。

【讨论】:

    最近更新 更多