我有一个应用程序是eureka发现客户端。
它可以很好地注册我的Eureka服务器。
可悲的是,当我尝试在任何@Component或@Service类中自动装配EurekaClient以获取注册表实例详细信息时,我告诉我无法自动装配,因为有2个bean定义:
我不知道造成这种情况的原因。我的pom中有以下依赖项。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>`
第一个依赖项中的排除是由于与第二个依赖项的冲突。
我的应用是通过以下配置类启用发现的应用:
@Configuration
@EnableDiscoveryClient
public class EurekaDiscoveryConfiguration {
}
我真的不明白为什么它认为有两个豆匹配该描述。
FWIW,奇怪的是,我可以在未使用@Component或@Service注释的类中自动装配它......并且它们有效 - 我已经设法让它们正确地返回实例信息
我有一种感觉,而且我已经读了一下,使用针对我的服务的泽西2.0会干扰尤里卡。我可能会换掉领事......
非常感谢任何建议。
编辑:(增加测试类)
这并没有告诉你多少 - 它只是基础应用程序测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyAppApplicationTest {
@Test
public void contextLoads() {
}
}
...许多测试扩展了该类,但它本身都失败了。它试图建立我目前已经自动装配EurekaClient的资源类。
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.netflix.discovery.EurekaClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
答案 0 :(得分:0)
如果通过设置禁用Eureka客户端,则该bean不可用
eureka.client.enabled=false
根据using类的不同,您可以使用@ConditionalOnProperty("eureka.client.enabled")
对其进行注释,以便仅在启用Eureka客户端时才加载它。
另一种解决方案是设置
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
如spring-cloud-netflix的issue #1511中所述。
答案 1 :(得分:0)
多年过去了,这种情况仍然会发生。
我现在正在回答我自己的问题,因为这显然是一个 IDEA 问题。没有围绕它的构建或运行问题,如果您禁用检查,程序就可以了。我不明白为什么 IDEA 专门对 Eureka Client 例外。