首页 > 解决方案 > java.lang.ClassNotFoundException:org.springframework.cloud.client.discovery.composite.reactive.ReactiveCompositeDiscoveryClientAutoConfig

问题描述

我正在尝试设置 spring 云配置客户端,这是我的 pom 依赖项:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    <version>2.1.5.RELEASE</version>
</dependency>

引导程序属性:

spring.application.name=test-ms
server.port=4532
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.username=root
spring.cloud.config.password=s3cr3t

我得到了这个例外:

java.lang.IllegalArgumentException: Could not find class [org.springframework.cloud.client.discovery.composite.reactive.ReactiveCompositeDiscoveryClientAutoConfiguration]
    at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:327)
    at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:483)
    at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:403)
    at org.springframework.core.annotation.TypeMappedAnnotation.asMap(TypeMappedAnnotation.java:288)
    at org.springframework.core.annotation.AbstractMergedAnnotation.asAnnotationAttributes(AbstractMergedAnnotation.java:193)
    at org.springframework.core.type.AnnotatedTypeMetadata.getAnnotationAttributes(AnnotatedTypeMetadata.java:106)
    at org.springframework.context.annotation.AnnotationConfigUtils.attributesFor(AnnotationConfigUtils.java:285)
    at org.springframework.context.annotation.AnnotationBeanNameGenerator.determineBeanNameFromAnnotation(AnnotationBeanNameGenerator.java:100)
    at org.springframework.context.annotation.AnnotationBeanNameGenerator.generateBeanName(AnnotationBeanNameGenerator.java:79)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.registerBeanDefinitionForImportedConfigurationClass(ConfigurationClassBeanDefinitionReader.java:160)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:141)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:337)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:242)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)

...

我怎样才能解决这个问题?我搜索了一下,发现 SimpleReactiveDiscoveryClientAutoConfiguration.java 是 spring-cloud-commons 自 2.2.0 以来的一部分,现在只有 RC:https ://github.com/spring-cloud/spring-cloud-commons/blob/master/spring- cloud-commons/src/main/java/org/springframework/cloud/client/discovery/simple/reactive/SimpleReactiveDiscoveryClientAutoConfiguration.java 当我添加 spring-cloud-commons 2.2.0 时,它可以工作,但是没有任何方法可以让它工作使用遥控?

我使用spring boot 2.2.1.RELEASE,spring-cloud-starter-config 2.1.5.RELEASE

标签: javaspringspring-bootspring-cloud-config

解决方案


我也是 Spring 新手(来自前端/JavaScript 背景),所以在 Java 世界中,很多东西对我来说很奇怪而且过于复杂。

我做了一些挖掘,发现了一些可能有助于详细解释的链接:

基本上(我是怎么理解的;我可能是错的),spring cloud 在 spring boot 之上工作;它不是 Spring Boot 组/项目的常规依赖项/一部分。所以基本上,它需要(所谓的)依赖管理。

将此添加到您的 pom.xml 中(这对我有用):

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

那是为了将项目设置为父应用程序。如果这不起作用,那么试试这个:

<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>

在这种方法中,我猜这是为了决定在 pom.xml 中为 spring 云依赖项使用哪个版本。对于这个,确保properties元素添加了 spring cloud 版本(这就是<version>${spring-cloud.version}</version>要引用的内容):

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>

同样,第一种方法对我有用。有关更多信息,请参阅链接。找到更多关于这方面的信息和文档比我想象的要难。


推荐阅读