我创建了一个eureka客户端,依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
</dependencies>
入口来启动报错,报错如下:
***************************
APPLICATION FAILED TO START
***************************
Description:
Field optionalArgs in org.springframework.cloud.netflix.eureka.
EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration
required a bean of type 'com.netflix.discovery.
AbstractDiscoveryClientOptionalArgs' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.netflix.discovery.AbstractDiscoveryClientOptionalArgs'
in your configuration.
Process finished with exit code 1
我知道加上如下依赖可以解决
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我就在思考这个问题的原因是什么?按照报错信息来看,是因为没有注入AbstractDiscoveryClientOptionalArgs这个对象,那是因为添加上web依赖后注解生效了,找到了这个对象?
就想问一下,这个原因是什么,为什么会报错?以及解决这个问题的原理。
在类
DiscoveryClientOptionalArgsConfiguration
中,生成需要的AbstractDiscoveryClientOptionalArgs
类型 bean。AbstractDiscoveryClientOptionalArgs
的扩展类RestTemplateDiscoveryClientOptionalArgs
(其它扩展类不符合要求) 需要RestTemplate
。RestTemplate
被spring-web
提供,spring-web
的依赖被spring-boot-starter-web
提供。我的疑惑
这是我通过 github 上最新的源码查到的,但是我添加了你的依赖版本
1.4.7.RELEASE
,发现DiscoveryClientOptionalArgsConfiguration
的源码并没有这样的问题。下面是最新的源码
能否贴一下你的
DiscoveryClientOptionalArgsConfiguration
内容?