【发布时间】:2020-05-14 23:22:15
【问题描述】:
我有一个从 Zookeeper 实例读取其配置属性的应用程序。
有一个内部 spring-boot-auto-configure 模块可以帮助从 zookeeper 实例中读取信息。
我们需要在bootstrap.properties文件中设置zookeeper实例信息。
来自自动配置模块的spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.company.name.ZooKeeperAutoConfig
同一个文件中还有AutoConfiguration类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.company.name.XyzAutoConfig
所以当应用程序启动时,它会从 bootstrap.properties 中获取信息并通过 auto-configure-module 连接到 zookeeper 实例。
我想使用@WebMvcTest 注解为 Spring API 控制器层编写测试。
但即使在测试中,它也会尝试连接到我不想要的 zookeeper 实例。我不希望单元测试与外部服务对话。
我想在测试期间排除 zookeeper 引导配置。
我尝试过的几种方法都没有运气。
1) 我尝试像下面这样排除,但它仍然连接到 Zookeeper
@TestPropertySource(properties=
{"spring.autoconfigure.exclude=com.company.name.ZooKeeperAutoConfig"})
2) 我创建了 bootstrap-test.properties 并为 zookeeper 属性添加了一些虚拟值。在测试中我添加了 @ActiveProfile("test") 。这会尝试通过虚拟值连接到 Zookeeper,但最终失败。
有什么方法可以完全忽略/排除 Zookeeper 引导配置。应用程序不应该知道它需要连接到 zookeeper 才能工作。
在测试中排除 BootstrapConfiguration 是否可行?
如果需要更多信息,请告诉我。
【问题讨论】:
标签: java spring spring-boot apache-zookeeper spring-test