java - 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
解决方案
我也是 Spring 新手(来自前端/JavaScript 背景),所以在 Java 世界中,很多东西对我来说很奇怪而且过于复杂。
我做了一些挖掘,发现了一些可能有助于详细解释的链接:
- https://spring.io/projects/spring-cloud
- https://cloud.spring.io/spring-cloud-config/multi/multi__quick_start.html
- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies
- spring 父级的依赖项中缺少版本
基本上(我是怎么理解的;我可能是错的),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>
同样,第一种方法对我有用。有关更多信息,请参阅链接。找到更多关于这方面的信息和文档比我想象的要难。
推荐阅读
- python - Python Flask 无法将调试模式设置为 true
- php - 即使我在 laravel api 中获取不同的东西,也从数据库中获取错误的数据
- php - 在 laravel 中调用未定义的方法 stdClass::count()
- java - 运行自定义 Docker 映像后出现“找不到 Activemq”错误
- react-native - React Navigation:“导航”对象尚未初始化
- html - 横幅和页面顶部之间有空白区域
- javascript - 如何检查二维数组是否有重复项
- web-services - 通过服务中的 URL 检索 wsdl 时出错
- c++ - 为什么给 Predicate 参数时不能传递“std”前缀
- c# - 如何编码:if (e.ChangeType == 'Created') 在使用 FileSystemWatcher 时做某事?