我有一个从Zookeeper实例读取其配置属性的应用程序。
有一个内部的spring-boot-auto-configure模块,可帮助从Zookeeper实例中读取信息。
我们需要在bootstrap.properties
文件中设置Zookeeper实例信息。
来自自动配置模块的spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.company.name.ZooKeeperAutoConfig
同一文件中也有自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.company.name.XyzAutoConfig
因此,应用程序启动时,它将从bootstrap.properties获取信息,并通过自动配置模块连接到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是否可行?
请让我知道是否需要更多信息。
[想法-您是否尝试过在ZooKeeper自动配置类上添加@Conditional
注释?
@Configuration
@ConditionalOn....
public class com.company.name.ZooKeeperAutoConfig {
}
我无法自己检查,但可能取决于属性的条件有关,或者,如果应用程序上下文不是Web应用程序上下文(而是与测试相关的测试应用程序上下文),则应该匹配org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication
。