升级到 Spring Boot 2.3.8.RELEASE

问题描述

我正在尝试将 SpringBoot 版本从 2.0.x 升级到 2.3.8.RELEASE。更新后,在刷新 Spring Config Server 时,我在我的应用程序日志中收到 java.lang.NoClassDefFoundError:brave/internal/HexCodec。我的应用程序部署在 PCF 上,除了公司的内部依赖项外,还使用以下依赖项。

POM 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <properties>
        <spring.cloud.vault.version>2.0.1.RELEASE</spring.cloud.vault.version>
        <spring-cloud-config-client>2.1.4.RELEASE</spring-cloud-config-client>
        <spring.cloud.services.version>2.0.3.RELEASE</spring.cloud.services.version>
        <spring.cloud.dependencies.version>Hoxton.SR8</spring.cloud.dependencies.version>
    </properties>

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

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

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.3.8.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>

    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-vault-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.savoirtech.logging</groupId>
            <artifactId>slf4j-json-logger</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.pivotal.spring.cloud</groupId>
            <artifactId>spring-cloud-services-starter-config-client</artifactId>
            <version>${spring-cloud-config-client}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
    </dependencies>
</project>

我认为我遇到这个问题是因为 Spring Sleuth 中使用了 Zipkins(我们公司的内部依赖中有这个)。我尝试设置 spring.zepkin.enabled=false 并且我还尝试使用 org.springframework.cloud:spring-cloud-starter-sleuth:2.2.8.RELEASE 创建以下 bean,但我仍然遇到相同的错误

@Bean
Reporter<Span> reporter() {
    return Reporter.NOOP;
}

应用程序控制台错误信息:org.springframework.web.util.nestedservletexception: Handler dispatch Failed;嵌套异常是 java.lang.NoClassDefFoundError:brave/internal/HexCodec

在这一点上,我什至不确定我是否在正确的轨道上。如果需要更多信息,请告诉我。

解决方法

能否请您使用该版本系列的最新版本:Hoxton.SR11 和最新的 Spring Boot 2.3.x

通过这些,您应该会看到 org.springframework.cloud:spring-cloud-starter-zipkin:2.2.8.RELEASE 与匹配的 Sleuth 依赖项。这应确保您使用的是正确版本的 Brave。

如果这不起作用,请检查您的依赖树和 Spring Cloud BOM 并确保您使用的是正确的版本。