Spring Boot应用启动失败:无法自省HystrixCircuitBreakerAutoConfiguration类
问题
Spring Boot应用无法启动,报错信息为“Failed to introspect Class [org.springframework.cloud.netflix.hystrix.HystrixCircuitBreakerAutoConfiguration]”,完整错误栈如下:
java.lang.IllegalStateException: Error processing condition on org.springframework.cloud.openfeign.ribbon.DefaultFeignLoadBalancedConfiguration.feignClient at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.netflix.hystrix.HystrixCircuitBreakerAutoConfiguration] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:649) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1605) at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:223) at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:213) at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchingBeans(OnBeanCondition.java:167) Caused by: java.lang.NoClassDefFoundError: org/springframework/cloud/client/circuitbreaker/CircuitBreakerFactory at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.getDeclaredMethods(Class.java:1975) org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ... 33 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
项目的Pom配置如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> <spring-cloud-netflix-core.version>2.2.6.RELEASE</spring-cloud-netflix- core.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.0.1.RELEASE</version> </dependency> </dependencies>
解决方案
问题根源是Spring Boot与Spring Cloud版本不兼容,且缺少必要的断路器依赖,具体修复步骤如下:
统一Spring Cloud版本,匹配Spring Boot版本
Spring Boot 2.2.6.RELEASE对应的Spring Cloud版本为Hoxton.SR8,需通过Spring Cloud依赖管理统一版本,避免单独指定组件版本导致冲突。修改Pom配置如下:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> </properties> <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> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- 添加Hystrix依赖,解决CircuitBreakerFactory缺失问题 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> </dependencies>清理并重新构建项目
执行mvn clean install清理本地仓库的冲突依赖,重新下载匹配版本后,重启应用验证启动状态。
补充说明:CircuitBreakerFactory是Spring Cloud断路器抽象层类,需引入spring-cloud-starter-netflix-hystrix依赖提供具体实现;通过spring-cloud-dependencies统一管理版本是避免Spring Cloud组件版本冲突的最佳实践。
内容的提问来源于stack exchange,提问作者user19373833
相关产品推荐
相关产品推荐

