【问题标题】:springboot Upgrade from 2.3.5.RELEASE to 2.4.1- ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadataspringboot 从 2.3.5.RELEASE 升级到 2.4.1- ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
【发布时间】:2021-04-05 20:15:23
【问题描述】:

我正在尝试将我的 kotlin - gradle 项目从 springboot 版本 2.3.5.RELEASE 升级到 2.4.1。 springboot-2.4.1 和 sping-cloud-Hoxton.SR9 之间似乎存在版本不匹配。

build.gradle.kts sn-p

    plugins {
        id("org.springframework.boot") version "2.4.1"
        id("io.spring.dependency-management") version "1.0.10.RELEASE"
    
        kotlin("jvm") version "1.4.10"
    kotlin("plugin.spring") version "1.4.10"
    kotlin("plugin.jpa") version "1.4.10"
    kotlin("plugin.serialization") version "1.4.10"

    idea
    }
    
    group = "com.xxx"
    version = ""
    java.sourceCompatibility = JavaVersion.VERSION_11
    extra["springCloudVersion"] = "Hoxton.SR9"
    
    val resilience4jVersion = "1.3.1"
    val queryDslVersion = "4.4.0"
    val springCloudVersion = "Hoxton.SR9"
    val cucumberVersion = "6.7.0"
    val camundaVersion = "7.14.0"
    var jacocoVersion = "0.8.5"

dependencyManagement {
    imports {
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:$springCloudVersion")
    }
}


dependencies {

    implementation("org.springframework.cloud:spring-cloud-starter-openfeign")
    implementation("org.javers:javers-core:5.12.0")
    implementation("io.jsonwebtoken:jjwt-api:0.11.1")
    implementation("io.jsonwebtoken:jjwt-impl:0.11.1")
    implementation("io.jsonwebtoken:jjwt-jackson:0.11.1")


    implementation("org.springframework.boot:spring-boot-starter-mail")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-hateoas")
    // Aop dependency
    implementation("org.springframework.boot:spring-boot-starter-aop")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.apache.httpcomponents:httpclient:4.5.12")

    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5")

    implementation("com.fasterxml.jackson.core:jackson-databind:2.10.3")
    implementation("com.fasterxml.jackson.core:jackson-core:2.10.3")
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("javax.xml.bind:jaxb-api:2.3.0")

    implementation("org.springframework.boot:spring-boot-starter-integration")
    implementation("org.springframework.kafka:spring-kafka")
    implementation("org.springframework.integration:spring-integration-kafka:3.3.0.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-validation")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework:spring-tx")

    runtimeOnly("mysql:mysql-connector-java")
    implementation("org.mariadb.jdbc:mariadb-java-client:2.6.0")

    implementation("org.springdoc:springdoc-openapi-kotlin:1.4.3")
    implementation("org.springdoc:springdoc-openapi-ui:1.4.3")
    implementation("org.springdoc:springdoc-openapi-hateoas:1.4.3")
}

当我运行 springboot 应用程序时,我得到以下异常。在升级到较新版本之前,该应用程序运行正常。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@16f65612]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:586) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:244) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:767) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:572) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:144) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:212) ~[spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:117) ~[spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:74) ~[spring-cloud-context-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) ~[spring-context-5.3.2.jar:5.3.2]
    at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) ~[spring-boot-2.4.1.jar:2.4.1]
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) ~[na:na]
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:362) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1]
    at com.xxxx.MyApplicationKt.main(MyApplication.kt:22) ~[main/:na]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@16f65612]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.2.jar:5.3.2]
    at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.2.jar:5.3.2]
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:417) ~[spring-orm-5.3.2.jar:5.3.2]
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:388) ~[spring-orm-5.3.2.jar:5.3.2]
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:335) ~[spring-orm-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1100) ~[spring-beans-5.3.2.jar:5.3.2]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) ~[spring-beans-5.3.2.jar:5.3.2]
    ... 31 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166) ~[na:na]
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309) ~[na:na]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.2.jar:5.3.2]
    ... 37 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
    ... 41 common frames omitted

请帮我解决这个问题。

【问题讨论】:

    标签: spring-boot kotlin gradle spring-cloud


    【解决方案1】:

    以下解决方案在更新到 Spring Boot v2.5.6(截至 2021 年 10 月 21 日的最新版本(https://mvnrepository.com/artifact/org.springframework.boot/spring-boot/2.5.6 了解更多信息)时帮助了我:

    我在 pom.xml 中更新了 spring cloud 版本

    <spring-cloud.version>2020.0.4</spring-cloud.version>
    

    之前我使用 Spring Boot 的以下版本

    <spring-cloud.version>Hoxton.SR5</spring-cloud.version>
    

    【讨论】:

    • 我已经这样解决了,使用了 eureka-client.version=3.0.2 和 spring-cloud.version=2020.0.4 spring.boot.version 2.5.6
    【解决方案2】:

    添加以下版本的neflix-eureka-client 为我解决了这个问题:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>3.0.2</version>
    </dependency>
    

    【讨论】:

      【解决方案3】:

      在 spring 官方页面上有一个 release train spring boot 兼容性表 - Link

      这清楚地概述了哪个版本的 Spring Cloud 映射到哪个版本的 Spring Boot。

      对于 Spring Boot 版本 2.4.x、2.5.x Spring Cloud 2020.0.x aka Ilford

      查看 Spring Cloud 2020.0 发行说明以了解任何已知问题 - Link

      【讨论】:

        【解决方案4】:

        使用 mavenBom 添加依赖管理导入为我修复了它

        dependencyManagement {
            imports {
                mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Hoxton.SR10"
            }
        }
        

        【讨论】:

        • 工作的东西,谢谢
        【解决方案5】:

        spring-cloud-starter-bootstrap 现在有正式版了,添加这个解决了我的问题。

        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-bootstrap</artifactId>
          <version>3.0.1</version>
        </dependency>
        

        【讨论】:

          【解决方案6】:

          @spencergibb 几乎是正确的,但我仍然遇到同样的错误。除了@spencergibb 的回答,我还添加了 spring-cloud-starter-bootstrap 依赖项以使其成功运行。

          extra["springCloudVersion"] = "2020.0.0"
          val springCloudVersion = "2020.0.0"
          
          implementation("org.springframework.cloud:spring-cloud-starter-bootstrap")
          

          我点击此链接使其工作

          https://thepracticaldeveloper.com/book-update-2.4.0/

          【讨论】:

          • 我完全没有使用 Spring Cloud 就遇到了这个问题。这些依赖项现在是强制性的吗?
          • 我得到:“找不到 org.springframework.cloud:spring-cloud-starter-bootstrap:2020.0.0”
          【解决方案7】:

          Hoxton 不兼容 Spring Boot 2.4 使用 2020.0.0

          【讨论】:

          • Spring Boot 2.4 使用 2020.0.0 是什么意思?
          • val springCloudVersion = "2020.0.1"
          猜你喜欢
          • 1970-01-01
          • 2021-09-15
          • 2021-03-02
          • 2015-06-01
          • 2022-01-18
          • 2017-05-24
          • 2023-03-13
          • 1970-01-01
          • 2016-04-24
          相关资源
          最近更新 更多