我有一个eureka发现客户端应用程序。

它可以在我的Eureka服务器上注册。

可悲的是,当我尝试 Autowiring 任何@Component或@Service类中的EurekaClient来获取注册表实例详细信息时,被告知无法 Autowiring ,因为有两个bean定义:

java - Eureka Client-无法自动连线客户端( Spring 说有2个bean被定义)-LMLPHP

我不知道是什么原因造成的。我在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 {
}

我真的不明白为什么它认为有2个与该描述匹配的bean。

FWIW,奇怪的是,我可以在未使用@Component或@Service注释的类中对其进行自动布线,并且它们可以正常工作-我设法使它们正确返回实例信息。

我有一种感觉,并且我已经读过一些话,将jersey 2.0用于我的服务会干扰 Eureka 。我可能只是换去领事……

非常感谢您的任何建议。

编辑:(添加了测试类)

这并不能告诉您太多-只是基础应用程序测试
@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)}

最佳答案

如果通过设置禁用Eureka客户端,则该Bean不可用

eureka.client.enabled=false
根据使用的类,您可以使用@ConditionalOnProperty("eureka.client.enabled")对其进行注释,以便仅在启用Eureka客户端时才加载它。
另一个解决方案是设置
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
如spring-cloud-netflix的issue #1511中所述。

关于java - Eureka Client-无法自动连线客户端( Spring 说有2个bean被定义),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47045886/

10-13 03:27