SpringCloud问题排查

问题1报错,应用无法启动

org.springframework.core.io.ClassPathResource.getInputStream()抛出异常:

FileNotFoundException:org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.class cannot be opened because it does not exist

原因分析

HealthIndicatorAutoConfiguration 在spring-boot不同版本路径变了

  • spring-boot1.x: org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration
  • spring-boot2.x:org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration

通过debug发现,源头在 HystrixAutoConfiguration,代码如下:

import org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration;
@Configuration
@ConditionalOnClass({ Hystrix.class, HealthIndicator.class })
@AutoConfigureAfter({ HealthIndicatorAutoConfiguration.class })
public class HystrixAutoConfiguration {
	
}

HystrixAutoConfiguration依赖的是spring-boot1.x版本的HealthIndicatorAutoConfiguration,通过升级spring-cloud版本,问题解决。

问题2

同样的问题出现在 org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.class

需要分析出 org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration被谁用到的。
通过debug发现,在 AutoConfigurationSorter.addToClasses() 发现是org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration引入的,代码如下:

package org.springframework.cloud.netflix.ribbon;

@Configuration
@Conditional(RibbonAutoConfiguration.RibbonClassesConditions.class)
@RibbonClients
@AutoConfigureAfter(name = "org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration")
@AutoConfigureBefore({LoadBalancerAutoConfiguration.class, AsyncLoadBalancerAutoConfiguration.class})
@EnableConfigurationProperties({RibbonEagerLoadProperties.class, ServerIntrospectorProperties.class})
public class RibbonAutoConfiguration {

}

可以发现是同样的原因,实际上我们不会使用到RibbonAutoConfiguration,排除掉spring-cloud-netflix-ribbon,问题解决

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值