Spring Boot 1.5 @JdbcTest在使用Eureka Discovery时失败

时间:2017-01-10 14:51:23

标签: spring-boot spring-cloud-netflix

我试图在Spring boot 1.5.0.RC1中使用新的@JdbcTest注释。

我的应用程序使用Eureka发现,即我有

compile('org.springframework.cloud:spring-cloud-starter-eureka')

在我的build.gradle和

@EnableDiscoveryClient

在我的主要Spring Boot类

当我尝试使用@JdbcTest测试基于JdbcTemplate的DAO时,我收到此错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method eurekaHealthIndicator in org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration$EurekaHealthIndicatorConfiguration required a bean of type 'com.netflix.discovery.EurekaClient' that could not be found.


Action:

Consider defining a bean of type 'com.netflix.discovery.EurekaClient' in your configuration.

当它应该只加载与JDBC相关的bean时,看起来自动配置正在加载Eureka配置的一部分。

如果我添加

@TestPropertySource(properties={"eureka.client.enabled=false"})

测试问题消失了,但我认为@JdbcTest应该确保只加载了相关的bean。

我是否遗漏了某些内容,或者这是新的@JdbcTest,还是Spring Cloud Eureka的问题?

2 个答案:

答案 0 :(得分:1)

您的@SpringBootApplication上有@ EnableDiscoveryClient。当您使用切片注释(例如@JdbcTest)时,Spring Boot会通过查看测试包@SpringBootConfiguration来查找要使用的上下文。如果找不到,则查找父包等。如果使用合理的包结构而无需进一步自定义,则测试会使用@SpringBootApplication作为根上下文。

因此,处理该配置类(并且仅处理该配置类)@EnableDiscoveryClient也明显被处理。在您的情况下,这会产生额外的副作用:现在每个测试都需要Eureka客户端。

TL;DR从未在您的应用上添加此类注释。只有你确实需要它才能把它放进去。您可以在Spring Boot应用程序旁边定义一个@Configuration类。

答案 1 :(得分:1)

@大卫 我有类似的问题,并通过将以下内容添加到我的application.yml文件

来修复
eureka:
  client:
    enabled: false