一个SpringCloud和SpringBoot版本搭配不对引发的异常(SpringBoot和SpringCloud版本搭配指南)

1,741 阅读2分钟

异常问题以及代码:SpringCloud项目启动报错: WebServerException: Unable to start embedded Tomcat

Caused by: org.springframework.boot.web.server.WebServerException: 
Unable to start embedded Tomcat at org.springframework.boot.web.embedded.tomcat.
TomcatWebServer.initialize(TomcatWebServer.java:142) ~[spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]

原因分析:

首先看SpringCloud项目的配置文件、父模块的pom.xml以及程序的启动类的注解配置,排除语法疏忽造成的bug后,就需要检查在pom.xml文件种对依赖的配置了。

  • 原配置如下:我们可以看到SpringBoot的版本是2.3.0,而SpringCloud的版本则是Greenwich。经查证资料后发现,SpringCloud项目与SpringBoot有着比较严格的版本匹配。不能再像开发单体应用时,随时变更SpringBoot的版本。

      <!--引入SpringBoot环境-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.0.RELEASE</version>
            <relativePath/>
        </parent>
        <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <!--spring cloud 版本-->
            <!--<spring-cloud.version>Hoxton.SR6</spring-cloud.version>-->
            <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        </properties>
    
        <!--引入Springcloud依赖-->
        <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>

    故障解决:

    经过查找最新的SpringBoot和SpringCloud的版本对应关系,由于我们使用的SpringBoot是2.3.0,所以将SpringCloud的版本改为最新的正式版Hoxton.SR6即可。

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <!--spring cloud 版本-->
            <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
            <!-- <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>-->
    </properties>

    附:最新的SpringBoot和SpringCloud的版本对应关系查找,打开链接后返回的是个json数组,解析后即可。

    官方链接:start.spring.io/actuator/in…

    版本对应关系结果如下:

    "spring-cloud":{
    	"Finchley.M2":"Spring Boot >=2.0.0.M3 and <2.0.0.M5",
    	"Finchley.M3":"Spring Boot >=2.0.0.M5 and <=2.0.0.M5",
    	"Finchley.M4":"Spring Boot >=2.0.0.M6 and <=2.0.0.M6",
    	"Finchley.M5":"Spring Boot >=2.0.0.M7 and <=2.0.0.M7",
    	"Finchley.M6":"Spring Boot >=2.0.0.RC1 and <=2.0.0.RC1",
    	"Finchley.M7":"Spring Boot >=2.0.0.RC2 and <=2.0.0.RC2",
    	"Finchley.M9":"Spring Boot >=2.0.0.RELEASE and <=2.0.0.RELEASE",
    	"Finchley.RC1":"Spring Boot >=2.0.1.RELEASE and <2.0.2.RELEASE",
    	"Finchley.RC2":"Spring Boot >=2.0.2.RELEASE and <2.0.3.RELEASE",
    	"Finchley.SR4":"Spring Boot >=2.0.3.RELEASE and <2.0.999.BUILD-SNAPSHOT",
    	"Finchley.BUILD-SNAPSHOT":"Spring Boot >=2.0.999.BUILD-SNAPSHOT and <2.1.0.M3",
    	"Greenwich.M1":"Spring Boot >=2.1.0.M3 and <2.1.0.RELEASE",
    	"Greenwich.SR6":"Spring Boot >=2.1.0.RELEASE and <2.1.16.BUILD-SNAPSHOT",
    	"Greenwich.BUILD-SNAPSHOT":"Spring Boot >=2.1.16.BUILD-SNAPSHOT and <2.2.0.M4",
    	"Hoxton.SR6":"Spring Boot >=2.2.0.M4 and <2.3.2.BUILD-SNAPSHOT",
    	"Hoxton.BUILD-SNAPSHOT":"Spring Boot >=2.3.2.BUILD-SNAPSHOT and <2.4.0.M1",
    	"2020.0.0-SNAPSHOT":"Spring Boot >=2.4.0.M1"
    }