搭建springcloud config组件的时候,如果发现启动 config service 服务正常,而 config client 服务启动报错:
java.lang.IllegalArgumentException: Could not resolve placeholder '***' in value "${****}
出现该错说找不到配置文件中的 *** 属性。
这个时候首先考虑如下几个问题,看下你的代码中是否存在如下问题:
1: github上的配置文件的名字构成必须是: {application}-{profile}.properties 等方式
例 properties 文件,git 中书写方法为 name=123
重点: 如果你代码配置文件用的是 yml 格式,则git上的文件名为 {application}-{profile}.yml
例 yml文件,git 中书写方法为 name: 123 , 注意有空格
这点很容易忽视,如果不统一则启动会报如上错误!
2: sprringcloud config client 端配置文件命名是否错误
需新建 bootstrap.yml 文件,与application.yml 同一路径即可,
bootstrap.yml 文件示例:
server:
port: 8888
spring:
application:
name: springcloud-config-client
cloud:
config:
name: basefeign
discovery:
enabled: true
service-id: springcloud-config-bus
label: master
profile: dev
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8881/eureka/
这些配置需要写道bootstrap.yml 中,而 application.yml其实用不着删掉即可,因为bootstrap.yml是springboot默认启动高优先级加载的配置文件,如果非得想往application.yml中写点东西,可以把 application.name 属性挪到application.yml。
代码中有一个误区很多人会误解:
spring:
application:
name: springcloud-config-client
这个name属性代表的是该项目的项目名称,也可以代表为 github上文件的前缀名,
service-id 属性代表的是注册到注册重心的 springcloud config server 的项目服务名
label 代表分支 profile代表环境
如图为我git上的文件名
当config 中name属性没定义的话,则上图中application.name代表github中文件的文件前缀名,
(如果这样的话,那么我git 文件前缀名要改成 springcloud-config-client-dev.yml 。。。)
当config中 name属性定义了的话,如下图,则该config.name 会覆盖替换 application.name 属性,代表git中指定文件的前缀名
3: 检查 springcloud service 服务配置文件是否书写有误:
spring:
application:
name: springcloud-config-bus
cloud:
config:
server:
git:
uri: https://gitee.com/*****/config
search-paths: config-repository
default-label: master
username: ******
password: ******
server:
port: 8005
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8881/eureka/
注意git 属性配置
name 代表config service服务的服务名称, config client 端会用到一定要两边一致
search-paths 代表文件夹
default-label 代表 主分支
这三点都配置无误,一般可解决大部分无法访问git远程配置文件属性的问题。