下面列出的我的班级(ServiceDiscoveryConfiguration
)从未被使用过。即使我删除@EnableDiscoveryClient
以尝试完全避免设置,它仍会尝试连接到Consul。
对我来说唯一有用的就是彻底消除Consul Maven的倾向:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
如果不通过配置文件和注释设置,我该怎么做才能阻止Consul运行单元测试?
我有一个使用Spring Consul的应用程序。 我有一个类设置来启用这样的发现:
@Profile ("!" + Profiles.UNIT_TEST)
@Configuration
@EnableDiscoveryClient
public class ServiceDiscoveryConfiguration {
}
如果我没有弄错的话,应该禁用领事部分。基本测试类(它是我所有单元测试之间共享的abstract
)使用以下注释进行设置。这就是我认为问题所在的地方。
@SpringBootTest (classes = Service.class)
@WebAppConfiguration
@TestExecutionListeners (...)
@DirtiesContext
@ActiveProfiles (Profiles.UNIT_TEST)
@Test (...)
public abstract class AbstractBootTest extends AbstractTestNGSpringContextTests {
// ...
}
当我执行测试时,我得到:
引起:com.ecwid.consul.transport.TransportException: java.net.ConnectException:拒绝连接
这让我相信配置文件激活不起作用或我使用!
规范上的@Profile
运算符的语法没有按我认为的那样做。根执行类本身有基本注释,包括@ComponentScan
注释,我知道有正在扫描的相应包。
协助?
答案 0 :(得分:2)
您可以通过
停用@TestPropertySource(properties = {"spring.cloud.consul.config.enabled=false"})
答案 1 :(得分:1)
在test / resources下的application.properties文件中添加以下属性
spring.cloud.discovery.enabled=false
spring.cloud.consul.enabled=false
spring.cloud.consul.config.enabled=false
这将在测试您的应用程序时禁用领事集成
答案 2 :(得分:1)
如果您的项目中有bootstrap.properties
文件,则应在bootstrap.properties
下创建test/resources
文件:
spring.application.name=<service-name>
spring.cloud.bus.enabled=false
spring.cloud.discovery.enabled=false
spring.cloud.consul.enabled=false
spring.cloud.consul.config.enabled=false
这将禁用测试中的领事集成
答案 3 :(得分:0)
配置文件注释正确
@Profile ("!" + Profiles.UNIT_TEST)
配置文件激活看起来还不错,
@ActiveProfiles (Profiles.UNIT_TEST)
您写道您正在使用ComponentScan,这很重要,因为如果bean由@Bean注释方法实例化,则忽略bean上的@Profile注释。可能是你再次检查,看,这不会发生吗?
要缩小问题的范围,您可以尝试:
在ServiceDiscoveryConfiguration的构造函数中设置断点,以查看它是否已实例化
删除@EnableDiscoveryClient以查看这是否是导致问题的真正原因
答案 4 :(得分:0)
问题是,如果你在类路径中有spring-consul,它会尝试自动配置它