无法处理配置类 Spring Cloud Gateway 的导入候选
Posted
技术标签:
【中文标题】无法处理配置类 Spring Cloud Gateway 的导入候选【英文标题】:Failed to process import candidates for configuration class spring cloud gateway 【发布时间】:2021-04-18 02:58:27 【问题描述】:。 ____ _ __ _ _ /\ / ' __ _ () __ __ _ \ \ \ ( ( )__ | '_ | '| | ' / ` | \ \ \ \/ __)| |)| | | | | || (||))))) ' || .__|| ||| |_, | / / / / =========||===============|/=//// :: Spring Boot :: (v2.4.1)
2021-01-13 10:43:21.414 INFO 17304 --- [main] cscgateway.CloudGatewayApplication:在 PID 17304 的 Ajinas 上使用 Java 1.8.0_271 启动 CloudGatewayApplication(D:\microservice\cloud-gateway\target\用户在 D:\microservice\cloud-gateway 中启动的类) 2021-01-13 10:43:21.421 INFO 17304 --- [main] c.s.c.gateway.CloudGatewayApplication:未设置活动配置文件,回退到默认配置文件:默认 2021-01-13 10:43:22.659 WARN 17304 --- [main] os.boot.actuate.endpoint.EndpointId:端点 ID 'hystrix.stream' 包含无效字符,请迁移到有效格式。 2021-01-13 10:43:23.161 WARN 17304 --- [main] onfigReactiveWebServerApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanDefinitionStoreException:无法处理配置类的导入候选 [com .study.cloud.gateway.CloudGatewayApplication];嵌套异常是 java.io.FileNotFoundException: 类路径资源 [org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.class] 无法打开,因为它不存在 2021-01-13 10:43:23.198 信息 17304 --- [主要] ConditionEvaluationReportLoggingListener:
启动 ApplicationContext 时出错。要显示条件报告,请在启用“调试”的情况下重新运行您的应用程序。 2021-01-13 10:43:23.261 错误 17304 --- [main] os.boot.SpringApplication:应用程序运行失败
org.springframework.beans.factory.BeanDefinitionStoreException:无法处理配置类 [com.study.cloud.gateway.CloudGatewayApplication] 的导入候选;嵌套异常是 java.io.FileNotFoundException: 类路径资源 [org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.class] 无法打开,因为它不存在 在 org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:610) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.access$800(ConfigurationClassParser.java:111) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:812) ~[spring-context-5.3.2.jar:5.3.2] 在 java.util.ArrayList.forEach(未知来源)~[na:1.8.0_271] 在 org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:809) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:780) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:193) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:336) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:252) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:285) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:99) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:751) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:569) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:63) ~[spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) [spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) [spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:326) [spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) [spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) [spring-boot-2.4.1.jar:2.4.1] 在 com.study.cloud.gateway.CloudGatewayApplication.main(CloudGatewayApplication.java:14) [classes/:na] 引起:java.io.FileNotFoundException:类路径资源[org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.class]无法打开,因为它不存在 在 org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180) ~[spring-core-5.3.2.jar:5.3.2] 在 org.springframework.core.type.clas-s-reading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:55) ~[spring-core-5.3.2.jar:5.3.2] 在 org.springframework.core.type.clas-s-reading.SimpleMetadataReader.(SimpleMetadataReader.java:49) ~[spring-core-5.3.2.jar:5.3.2] 在 org.springframework.core.type.clas-s-reading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) ~[spring-core-5.3.2.jar:5.3.2] 在 org.springframework.boot.type.clas-s-reading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:86) ~[spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.boot.type.clas-s-reading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:73) ~[spring-boot-2.4.1.jar:2.4.1] 在 org.springframework.core.type.clas-s-reading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81) ~[spring-core-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:696) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getRelated(ConfigurationClassParser.java:1090) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getAnnotationAttributes(ConfigurationClassParser.java:1071) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.collectImports(ConfigurationClassParser.java:549) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:522) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:311) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) ~[spring-context-5.3.2.jar:5.3.2] 在 org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:600) ~[spring-context-5.3.2.jar:5.3.2] ...省略了20个常用框架`package com.study.cloud.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class CloudGatewayApplication
public static void main(String[] args)
SpringApplication.run(CloudGatewayApplication.class, args);
spring:
application:
name: GATEWAY-SERVICE
cloud:
gateway:
routes:
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/order/**
filters:
- name: Circuit-Breaker
args:
name: order-service
fallbackuri: forward:/orderFallBack
- id: payment-service
uri: lb://PAYMENT-SERVICE
predicates:
- Path=/payment/**
filters:
- name: Circuit-Breaker
args:
name: payment-service
fallbackuri: forward:/orderFallBack
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: localhost
server:
port: 8989
management:
endpoints:
web:
exposure:
include: hystrix.stream
hystrix:
command:
fallbackcmd:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.1 com.study 云网关 0.0.1-快照 云网关 Spring Boot 微服务演示项目
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.0</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
【问题讨论】:
【参考方案1】:我遇到了类似的问题,我的问题是由于 Maven 依赖项导入。尝试通过添加以下依赖项来启动应用程序:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
</dependency>
并删除现有的依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
【讨论】:
以上是关于无法处理配置类 Spring Cloud Gateway 的导入候选的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Stream 消息从/到 JSON 转换配置
无法根据活动的 Spring 配置文件生成不同的 spring-cloud-gateway 路由
Spring Cloud Kubernetes - 启用配置重新加载时 Spring Boot 无法启动
Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议
使用 Spring Cloud Stream Kafka Binder 时无法设置 groupId 和 clientId