正在运行Sping Boot 2.6.6和Spring Cloud 2021.0.1
我试图将一个现有的服务迁移到Kubernetes,所以我添加了一个对spring-cloud-starter-kubernetes-client-all
的依赖关系。默认情况下,我有spring.cloud.kubernetes.enable=false
,并使用kubernetes
配置文件来启用它。这是为了允许此服务在Kubernetes和遗留环境中运行。
我的单元测试在本地构建时成功完成,但在Bitbucket管道中失败,并出现以下错误:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.cloud.kubernetes.commons.config.NamespaceResolutionFailedException: unresolved namespace
我怀疑发生这种情况是因为Bitbucket管道部署在Kubernetes中,Spring不知何故检测到了这一点。
- 在命令行上将
--define SPRING_CLOUD_KUBERNETES_ENABLED=false
传递给Maven - 将其设置为环境变量,例如
export SPRING_CLOUD_KUBERNETES_ENABLED=false
- 在命令行上将
--define spring.cloud.kubernetes.enabled=false
传递给Maven
我也检查了StackOverflow的类似问题,并调查了代码,也没有结果。实际上引发问题的类是KubernetesClientConfigUtils
,应该禁用它。
如果您能提供任何指导,我将不胜感激。
3条答案
按热度按时间bd1hkmkf1#
Spring Cloud会在加载激活的Spring配置文件配置之前检查应用程序是否在K8s环境中运行,并将
kubernetes
添加到激活的配置文件中。以前,在霍克斯顿SR 10中,配置文件会在检查Kubernetes之前被识别并加载bootstrap-<profile>.yml
。如果在配置文件配置或maven pom属性中设置了spring.cloud.kubernetes.enabled
,则会从那里获取spring.cloud.kubernetes.enabled
。由于maven允许在命令行上设置系统属性,因此可以通过在命令行上设置来禁用kubernetes检测:
surefire maven插件允许为所有测试设置系统属性,因此可以在surefire插件配置中将
spring.cloud.kubernetes.enabled
设置为false
。还可以使用@Faron的方法在单个测试类上设置配置,以显式设置任何
WebMvcTest
注解单元测试中的属性,例如:它也应该可以用于其他加载Spring应用程序上下文的单元测试注解,例如
WebFluxTest
。0lvr5msh2#
在尝试了其他几种方法之后,我终于偶然发现了一种有效的方法。
这也适用于加载Spring应用程序上下文(如
@WebFluxTest
)的任何单元测试注解8yparm6h3#
升级到Sping Boot 2.7.x和Spring Cloud 2021.x后,我也遇到了这个问题:
我的解决方案是在test
resources
文件夹中添加一个bootstrap.yml
文件,如下所示:(如果
application.yml
中有此文件,请将其删除)来自文档:
https://www.baeldung.com/spring-cloud-bootstrap-properties
https://github.com/spring-cloud/spring-cloud-kubernetes/issues?q=unresolved+namespace