Far*_*ron 3 spring maven spring-boot kubernetes spring-cloud
运行 Spring 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
Run Code Online (Sandbox Code Playgroud)
我怀疑发生这种情况是因为 Bitbucket Pipelines 部署在 Kubernetes 中,而 Spring 以某种方式检测到了这一点。我已尝试以下方法但无济于事
--define SPRING_CLOUD_KUBERNETES_ENABLED=false
通过命令行传递给 Mavenexport SPRING_CLOUD_KUBERNETES_ENABLED=false
--define spring.cloud.kubernetes.enabled=false
通过命令行传递给 Maven我还检查了 StackOverflow 是否有类似问题并调查了代码也无济于事。实际引发问题的类是KubernetesClientConfigUtils
,应该禁用它。
我将不胜感激您能提供的任何指导。
kubernetes
Spring Cloud 在加载活动的 spring 配置文件配置并添加到活动配置文件之前,会检查应用程序是否在 K8s 环境中运行。bootstrap-<profile>.yml
此前,在 Hoxton SR10 中,在检查 Kubernetes 之前会识别并加载配置文件。spring.cloud.kubernetes.enabled
如果在配置文件配置或 Maven pom 属性中设置,则从那里获取。
由于 maven 允许在命令行上设置系统属性,因此可以通过在命令行中设置来禁用 kubernetes 检测:
mvn test -Dspring.cloud.kubernetes.enabled=false
Run Code Online (Sandbox Code Playgroud)
Surefire maven 插件允许为所有测试设置系统属性,因此可以在 Surefire 插件配置中spring.cloud.kubernetes.enabled
进行设置。false
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<spring.cloud.kubernetes.enabled>false</spring.cloud.kubernetes.enabled>
</systemPropertyVariables>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
还可以使用 @Faron 的方法在单个测试类上设置配置,以在任何WebMvcTest
带注释的单元测试中显式设置属性,例如:
@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })
Run Code Online (Sandbox Code Playgroud)
它还应该适用于加载 Spring 应用程序上下文的其他单元测试注释,例如WebFluxTest
.
归档时间: |
|
查看次数: |
3163 次 |
最近记录: |