无法处理配置类 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

Spring Cloud,配置服务器无法启动,如何为git配置uri