SpringCloud - 整合Nacos启动报错Consider defining a bean of type IClientConfig
- 前言
- 一. 尝试解决Bug的几种不合适方案
- 1.1 添加ribbon依赖
- 1.2 按照提示增加IClientConfig配置
- 1.3 正确答案
前言
我写了一套网关服务,一模一样的代码在自己电脑和公司电脑都写了一份。结果:
- 公司电脑:启动报错。
- 自己电脑:正常运行。
代码一模一样,最终发现,有一处不同:
-
公司电脑:包名以
com
为开头。 -
自己电脑:包名不是以
com
为开头。
最终启动报错如下:
再说结果之前,先说一下我从网上找过的各种解决方案。因为网上大多都是这几种方案,但是具体问题得具体分析。这里先排个雷(仅针对于包名为com
的情况)
一. 尝试解决Bug的几种不合适方案
1.1 添加ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
添加后,依旧报错。不可行。
1.2 按照提示增加IClientConfig配置
在配置类中增加一个Bean
:
@Bean
public IClientConfig iClientConfig() {
return new DefaultClientConfigImpl();
}
添加之后启动正常。但是!但是!但是我发送请求到网关,然后网关再进行转发的时候,就出大问题了:
详细信息:
Error creating bean with name 'ribbonLoadBalancingHttpClient' defined in org.springframework.cloud.netflix.ribbon.apache.HttpClientRibbonConfiguration:
Unsatisfied dependency expressed through method 'ribbonLoadBalancingHttpClient' parameter 2
也就是说创建ribbonLoadBalancingHttpClient
这个Bean
的时候出了问题。然后构造函数是有问题的。需要两个。具体原因不往下分析了。反正问题代码就出在上面的配置Bean
。
return new DefaultClientConfigImpl();
虽然增加它,可以避免启动错误,但是无法阻挡这种运行时错误,比如这种构造函数的调用出错。
1.3 正确答案
把上面几种方案都去除。然后将包名改为非com
。原因:
Nacos
在启动的时候,就会扫描以com
为开头的包。此时需要加载路径为com.netflix.client.config.IClientConfig
的相关实例。- 然后我们的包名恰恰以
com
为开头,可能优先扫描本地项目,就会发现找不到这个类,就会报错。无法启动。
当然,上面的是我的一个猜想,但是如果本地项目使用com
为开头的话,肯定是存在一定的冲突的。
附带springcloud
的github
相关问题IClientConfig找不到,官网上也有其他的解决方案。看看能不能帮到大家。