禁用 Consul 进行 SB 2.4 的集成测试

Posted

技术标签:

【中文标题】禁用 Consul 进行 SB 2.4 的集成测试【英文标题】:Disable Consul for integration tests with SB 2.4 【发布时间】:2021-06-07 13:27:22 【问题描述】:

由于SB 2.4 中的新SB 配置属性spring.config.import,我无法进行集成测试。以前,我有bootstrap-test.ymlspring.cloud.consul.enabled: false,效果很好。自从升级到2.4.3,我在application yml 中有spring.config.import: "consul:",并且在application-test.yml 文件中似乎没有禁用它。我已经尝试了覆盖spring.config.import: "optional:consul:" 和在application-test.yml 中设置spring.cloud.consul.enabled: false 的所有可能组合。但是我仍然遇到同样的错误

Config data resource ... via location 'consul:' does not exist

我不想在 application.yml 中使用可选导入,因为 main 不应该在没有它的情况下启动。唯一似乎有帮助的是设置use-legacy-processing: true,但我不明白为什么。

【问题讨论】:

设置spring.cloud.consul.enabled=false 应该可以工作。可以分享一下你的配置吗? github.com/spring-cloud/spring-cloud-consul/blob/master/… 我想知道是否尝试将其设置在配置文件中为时已晚。可以尝试在@SpringBootTest中设置吗? 当然,当我在@SpringBootTest 上设置它时,给定spring.config.import=consul: 我得到Unable to load config data from 'consul:', File extension is not known to any PropertySourceLoader. If the location is meant to reference a directory, it must end in '/' 好的,感谢您提供的信息。可能是一个错误 越想越没bug。 spring.config.import 不能在 application-.yml 文件中被覆盖,因为它是附加的(它是一个特殊属性)。还不确定如何解决您的情况,准备与 Spring Boot 工程师聊天。 您有其他环境的其他配置文件吗? 【参考方案1】:

根据问题上的 cmets,这可能只是一种解决方法,但目前对我有用。您的里程可能会有所不同。

将 spring.config.import 属性指定为环境变量允许它不为测试设置,而是为应用程序的部署点工作。

我的完整设置。

application.yml 包含正常的 consul 启用配置。 application-standalone.yml 只是禁用除spring.config.import 之外的所有属性 spring.config.import 仅添加到启动参数中。

【讨论】:

以上是关于禁用 Consul 进行 SB 2.4 的集成测试的主要内容,如果未能解决你的问题,请参考以下文章

运行测试时禁用 Spring cloud consul

Centos7.5 Prometheus2.5配置和基于Consul1.2.4的服务发现

Spring Boot实战系列集成Consul配置中心

2.4G无线射频前端EFM芯片CB5309;兼容

如何在 Spring Boot 2.2.0 的集成测试中禁用安全性?

Spring Boot + Spring Cloud 集成 Consul 服务注册发现