Spring Cloud整合Consul KV功能启动报错
先介绍项目的基本版本情况:spring-boot-starter-parent:2.6.6,spring-cloud-dependencies:2021.0.9,spring-cloud-starter-consul-config在pom文件中引入时没有指定版本,具体版本由它的parent管理,向上追溯为spring-cloud-dependencies-parent:3.1.9。
假设配置文件在Consul KV中的路径是config/serviceA-dev/serviceAConfig,在其中一个微服务配置好spring.cloud.consul.config.*相关参数之后,如果只需要引入这个config/serviceA-dev/serviceAConfig文件,那么spring.config.import的值直接写 'consul:' 项目即可正常启动。
但问题是实际项目中极大概率是一个服务通常需要引入多个配置文件,尤其是设计公共配置和私有配置的情况下,此时在spring.config.import后面追加一个consul:config/serviceB-dev/serivceBConfig,可能出现两种情况:
- 如果配置中指定了Consul服务的IP端口,代码中通过@Value注入的、存在于serviceAConfig中的配置项会找不到,报错Could not resolve placeholder 'placeholder' in value "${placeholder}";
- 如果配置中未指定Consul服务的IP端口,启动时会报错:Config data resource '[ConsulConfigDataResource@f2c488 context = '/serviceB-dev/serivceBConfig/', optional = true, properties = [ConsulConfigProperties@54acff7d enabled = true, prefixes = list['config'], defaultContext = 'serviceA', profileSeparator = '-', format = YAML, dataKey = 'serviceAConfig', aclToken = 'placeholder', watch = [ConsulConfigProperties.Watch@5488b5c5 waitTime = 55, enabled = true, delay = 10000], failFast = true, name = 'application'], profile = [null]]' via location 'consul:config/serviceB-dev/serivceBConfig' does not exist
网上关于整合Consul作为配置中心的帖子和开源项目都只引入了一个配置文件,而且要么SpringBoot版本较低没遇上,要么遇到引入外部配置源必须写spring.config.import的问题好多都是加个配置直接绕过,请问有没有遇到过类似问题的?到底应该怎么解决?