我试图在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的问题?
答案 0 :(得分:1)
您的@SpringBootApplication
上有@ EnableDiscoveryClient
。当您使用切片注释(例如@JdbcTest
)时,Spring Boot会通过查看测试包@SpringBootConfiguration
来查找要使用的上下文。如果找不到,则查找父包等。如果使用合理的包结构而无需进一步自定义,则测试会使用@SpringBootApplication
作为根上下文。
因此,处理该配置类(并且仅处理该配置类)@EnableDiscoveryClient
也明显被处理。在您的情况下,这会产生额外的副作用:现在每个测试都需要Eureka客户端。
TL;DR
从未在您的应用上添加此类注释。只有你确实需要它才能把它放进去。您可以在Spring Boot应用程序旁边定义一个@Configuration
类。
答案 1 :(得分:1)
@大卫 我有类似的问题,并通过将以下内容添加到我的application.yml文件
来修复eureka:
client:
enabled: false