Spring Web-mvc 不适用于 Spring Boot [Spring cloud]

Posted

技术标签:

【中文标题】Spring Web-mvc 不适用于 Spring Boot [Spring cloud]【英文标题】:Spring Web-mvc not working with Spring Boot[Spring cloud] 【发布时间】:2018-04-19 00:12:33 【问题描述】:

我是微服务新手。我使用 Spring 创建了一个微服务应用程序。我正在使用“spring-cloud-starter-eureka-server”。我总共有 3 个模块:

微服务cldm 账户微服务 webclient-microservice-server

在下面找到它们的主要类:

 @EnableEurekaServer
 @SpringBootApplication
 public class MicroservicecldmApplication 
       public static void main(String[] args) 
          SpringApplication.run(MicroservicecldmApplication.class, args);
       
 

   @EnableDiscoveryClient
   @SpringBootApplication
   @ComponentScan(basePackages="com.wmsdm.cloud")
   public class WebclientMicroserviceServerApplication 
        public static void main(String[] args) 
             SpringApplication.run(WebclientMicroserviceServerApplication.class, args);
        
    

在 application.properties 我有以下条目:

spring.application.name=WebclientMicroserviceServerApplication
eureka.client.serviceUrl.defaultZone:http://localhost:9091/eureka/
server.port=9993
eureka.instance.lease-renewal-interval-in-seconds=80
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
spring.mvc.static-path-pattern=/resources/**

我有一个 AccountController 类如下:

@Controller
public class AccountController 
    @RequestMapping(value = "/account", method = RequestMethod.GET)
    public String viewAccount() 
        return "accountSummary";
    
 

我的 /WEB-INF/view 路径中有 accountSummary.jsp 页面。此外,在 maven 的 pom.xml 中,我有以下依赖项以及其他依赖项:

   <groupId>com.wmsdm.cloud</groupId>
   <artifactId>webclient-microservice-server</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>war</packaging>

   <name>webclient-microservice-server</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.8.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Dalston.SR4</spring-cloud.version>
  </properties>

  <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
      </dependency>
  </dependencies>

  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>$spring-cloud.version</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
      </dependencies>
  </dependencyManagement>

  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

尽管有这些,当我点击 URL 时:

http://localhost:9993/WebclientMicroserviceServerApplication/account

我收到错误No mapping found for the requested uri

【问题讨论】:

【参考方案1】:

我建议使用spring-boot-starter-web 而不是tomcat-embed-jasper。您可以在 pom.xml 中使用多个启动器。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

请参阅spring.io 了解更多信息。

【讨论】:

为 web 模块添加了整个 pom.xml【参考方案2】:

确保上下文组件扫描基础包正确。如果未指定,请使用正则表达式。

【讨论】:

@ComponentScan(basePackages="com.wmsdm.cloud") 正如我所发布的那样已经添加了。此外,所有的类都在同一个包下。所以,根据 spring boot @SpringBootApplication 注释将扫描。 @Arun 这不是 eureka 或任何 Netflix 工具的问题。它的问题是 spring 找不到 @components 或任何注释 当内部tomcat启动时,我发现它已经扫描了@RequestMapping("/account")。我在eclipse控制台@Arun中看到了信息消息 nWebAppInitializer的URL映射是什么?

以上是关于Spring Web-mvc 不适用于 Spring Boot [Spring cloud]的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 如何配置构建文件以从同一项目创建 Spring boot jar 和 spring web-mvc war

org.springframework.beans.factory.UnsatisfiedDependencyException 使用 Spring web-mvc 5.0.1.RELEASE 和 H

使用 JMH 对 Spring Boot 应用程序进行基准测试

Spring @RefreshScope 不适用于 @Component

Spring依赖注入不适用于继承

Spring @ExceptionHandler 不适用于 @ResponseBody