
项目版本
spring-boot-version:2.2.5.RELEASE
spring-cloud.version:Hoxton.SR3
ConfigServer服务端
先构建SpringCloud Config服务端
打开https://start.spring.io/
勾选Config Server,下载导入IDE即可

部分pom信息
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency>
application.properties
# 应用服务名称spring.application.name=config-server# 应用服务端口号server.port=9001# Git远程库检索相对地址spring.cloud.config.server.git.search-paths=/springCloudAProject/**# Git远程库http访问项目地址spring.cloud.config.server.git.uri=https://github.com/niuniu9631/SpringCloudConfig# Git远程库http访问验证用户名spring.cloud.config.server.git.username=自己Git账号# Git远程库http访问验证密码spring.cloud.config.server.git.password=自己Git账号密码
ConfigServerApplication.java
@EnableConfigServer@SpringBootApplicationpublic class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}}
至此服务端相关代码配置都已OK,让我们一起Run起来吧。
通过浏览器访问下服务,http://localhost:9001/

因为未对外开放任何访问接口,所以出现404就是对的啦,只要项目没有启动出错就说明配置这块没啥问题了,不放心当然可以构建个客户端访问拉取下数据。这边我提供下我这边发现的一个小技巧,启动没报错后,可去系统的临时文件查看是否有新建的以**config-repo-xxxxx**开头的目录,有的话说明服务端Git配置这块没有问题。
Windows默认临时目录:C:\Users\wyb\AppData\Local\TempLinux默认临时目录:/tmp
该配置项可根据该配置项进行调整
spring.cloud.config.server.git.basedir=指定目录
我这边未配置指定目录,临时目录文件如下

ConfigClient客户端
还是老样子,打开https://start.spring.io/,
勾选Config Client,Spring Web,下载导入IDE即可。

部分pom信息
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
application.properties
# 客户端服务应用名称spring.application.name=config-client# 客户端端口号server.port=9002
bootstrap.properties
# 应用服务名称spring.cloud.config.name=config-client# 对应git上分支名称spring.cloud.config.label=master# 对应配置文件上profiles参数项spring.cloud.config.profile=dev# 配置服务端请求地址spring.cloud.config.uri=http://localhost:9001/
ConfigClientApplication.java
@SpringBootApplicationpublic class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}
ConfigClientWebController.java
用于访问配置项进行验证
@RestControllerpublic class ConfigClientWebController {@Value("${app.env.name}")private String appEnvName;@RequestMapping("/getEnv")public String getEnv() {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+",envName:"+appEnvName;}}
至此客户端相关代码配置都已OK,让我们一起Run起来吧。
通过浏览器访问下服务,http://localhost:9002/getEnv

成功获取到Git远程仓库中的配置项信息。远程仓库目录如下图

注意事项
到此为止,已基本完成配置中心服务端和客户端的构建及配置,接下来说下本人在构建搭建过程中遇到的问题。
问题1
spring.cloud.config.server.git.search-paths配置问题
刚开始我这边该配置参数如下
spring.cloud.config.server.git.search-paths=/springCloudAProject/**
Config Server端启动正常,Config Client端启动报如下错误
java.lang.IllegalArgumentException: Could not resolve placeholder
后来自己折腾来折腾去,渐渐发现了问题所在,原来这个/**
存在一定的对应关系,不能乱用,调整目录结构后正常访问了


问题2
公司项目Git采用阿里云Code进行管理,服务端配置后老是提示没有权限访问
排查了下项目权限也是master,账号和密码都是对的,怎么会没有权限访问呢。折腾了许久都没有进展,后来查看Spring Cloud Config 配置项得知还可以配置SSH访问,那就试试吧,调整服务端配置如下
spring.cloud.config.server.git.uri = git@code.aliyun.com:XXX/XProjectConfig.gitspring.cloud.config.server.git.ignore-local-ssh-settings=truespring.cloud.config.server.git.private-key=XXX
在这里也遇到了另外一个问题,网上该配置都是基于yml配置的,心想应该都兼容的吧,将私钥复制过来,发现不对貌似都不能正常识别该配置,后通过百度得知如下
私钥开头和结尾前一行需要\n,中间行需要 \ 连接;要保证秘钥内容是绿色有效值文本
具体如下
spring.cloud.config.server.git.private-key=-----BEGIN RSA PRIVATE KEY-----\n\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\XXXXXXXXXXXXXXXXXXXXXXXXX\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\XXXXXXXXXXXXXXXXXXXXXXX\n\-----END RSA PRIVATE KEY-----






