大家好,最近公司新项目采用SpingCloud全家桶进行开发,原先对SpringCloud仅仅只是停留在了解的初级层面,此次借助新项目的契机可以深入实践下SpringCloud,甚是Happy。大学毕业刚入职的时候就有想写技术文章的想法,蹉跎蹉跎都那么些年过去了,期间所遇到的问题都图方便随手保存在了有道云笔记这个狭小的空间中,记了这么多也要见见光了,后续有机会都迁移出来,大家互相学习,提升技术,修炼内功。话不多说,那我们现在就开始SpringCloud之旅吧!

项目版本

spring-boot-version:2.2.5.RELEASE

spring-cloud.version:Hoxton.SR3

ConfigServer服务端

先构建SpringCloud Config服务端

打开https://start.spring.io/

勾选Config Server,下载导入IDE即可



部分pom信息

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-config-server</artifactId>
  4. </dependency>

application.properties

  1. # 应用服务名称
  2. spring.application.name=config-server
  3. # 应用服务端口号
  4. server.port=9001
  5. # Git远程库检索相对地址
  6. spring.cloud.config.server.git.search-paths=/springCloudAProject/**
  7. # Git远程库http访问项目地址
  8. spring.cloud.config.server.git.uri=https://github.com/niuniu9631/SpringCloudConfig
  9. # Git远程库http访问验证用户名
  10. spring.cloud.config.server.git.username=自己Git账号
  11. # Git远程库http访问验证密码
  12. spring.cloud.config.server.git.password=自己Git账号密码

ConfigServerApplication.java

  1. @EnableConfigServer
  2. @SpringBootApplication
  3. public class ConfigServerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ConfigServerApplication.class, args);
  6. }
  7. }

至此服务端相关代码配置都已OK,让我们一起Run起来吧。

通过浏览器访问下服务,http://localhost:9001/



因未对外开放任何访问接口,所以出现404就是对的啦,只要项目没有启动出错就说明配置这块没啥问题了,不放心当然可以构建个客户端访问拉取下数据。这边我提供下我这边发现的一个小技巧,启动没报错后,可去系统的临时文件查看是否有新建的以config-repo-xxxxx开头的目录,有的话说明服务端Git配置这块没有问题。

Windows默认临时目录:C:\Users\wyb\AppData\Local\Temp

Linux默认临时目录:/tmp

该配置项可根据该配置项进行调整

  1. spring.cloud.config.server.git.basedir=指定目录

我这边未配置指定目录,临时目录文件如下

ConfigClient客户端

还是老样子,打开https://start.spring.io/,

勾选Config Client,Spring Web,下载导入IDE即可。



部分pom信息

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-config</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-web</artifactId>
  8. </dependency>

application.properties

  1. # 客户端服务应用名称
  2. spring.application.name=config-client
  3. # 客户端端口号
  4. server.port=9002

bootstrap.properties

  1. # 应用服务名称
  2. spring.cloud.config.name=config-client
  3. # 对应git上分支名称
  4. spring.cloud.config.label=master
  5. # 对应配置文件上profiles参数项
  6. spring.cloud.config.profile=dev
  7. # 配置服务端请求地址
  8. spring.cloud.config.uri=http://localhost:9001/

ConfigClientApplication.java

  1. @SpringBootApplication
  2. public class ConfigClientApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(ConfigClientApplication.class, args);
  5. }
  6. }

ConfigClientWebController.java

用于访问配置项进行验证

  1. @RestController
  2. public class ConfigClientWebController {
  3. @Value("${app.env.name}")
  4. private String appEnvName;
  5. @RequestMapping("/getEnv")
  6. public String getEnv() {
  7. return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+",envName:"+appEnvName;
  8. }
  9. }

至此客户端相关代码配置都已OK,让我们一起Run起来吧。

通过浏览器访问下服务,http://localhost:9002/getEnv

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

注意事项

到此为止,已基本完成配置中心服务端和客户端的构建及配置,接下来说下本人在构建搭建过程中遇到的问题。

问题1:spring.cloud.config.server.git.search-paths配置问题

刚开始我这边该配置参数如下

  1. spring.cloud.config.server.git.search-paths=/springCloudAProject/**

Config Server端启动正常,Config Client端启动报如下错误

  1. java.lang.IllegalArgumentException: Could not resolve placeholder

后来自己折腾来折腾去,渐渐发现了问题所在,原来这个/**

存在一定的对应关系,不能乱用,调整目录结构后正常访问了

问题2

公司项目Git采用阿里云Code进行管理,服务端配置后老是提示没有权限访问

排查了下项目权限也是master,账号和密码都是对的,怎么会没有权限访问呢。折腾了许久都没有进展,后来查看Spring Cloud Config 配置项得知还可以配置SSH访问,那就试试吧,调整服务端配置如下

  1. spring.cloud.config.server.git.uri = git@code.aliyun.com:XXX/XProjectConfig.git
  2. spring.cloud.config.server.git.ignore-local-ssh-settings=true
  3. spring.cloud.config.server.git.private-key=XXX

在这里也遇到了另外一个问题,网上该配置都是基于yml配置的,心想应该都兼容的吧,将私钥复制过来,发现不对貌似都不能正常识别该配置,后通过百度得知如下

私钥开头和结尾前一行需要\n,中间行需要 \ 连接;要保证秘钥内容是绿色有效值文本

具体如下

  1. spring.cloud.config.server.git.private-key=-----BEGIN RSA PRIVATE KEY-----\n\
  2. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\
  3. XXXXXXXXXXXXXXXXXXXXXXXXX\
  4. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\
  5. XXXXXXXXXXXXXXXXXXXXXXX\n\
  6. -----END RSA PRIVATE KEY-----

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

SpringCloud系列之配置中心(Config)使用说明的更多相关文章

  1. SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版

    前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...

  2. SpringCloud学习系列之四-----配置中心(Config)使用详解

    前言 本篇主要介绍的是SpringCloud中的分布式配置中心(SpringCloud Config)的相关使用教程. SpringCloud Config Config 介绍 Spring Clou ...

  3. 七、springcloud之配置中心Config(二)之高可用集群

    方案一:传统作法(不推荐) 服务端负载均衡 将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护,而客户端在指定Config Server位置时, ...

  4. springcloud(四):应用配置中心config的安全设置

    springcloud应用配置中心config的安全设置 在springcloud应用开发中,为了方便在线管理我们的配置文件,通常会配一个配置中心config-server,这里托管着应用的一些配置文 ...

  5. Spring-cloud微服务实战【九】:分布式配置中心config

      回忆一下,在前面的文章中,我们使用了spring cloud eureka/ribbon/feign/hystrix/zuul搭建了一个完整的微服务系统,不管是队内还是对外都已经比较完善了,那我们 ...

  6. SpringCloud配置中心config

    1,配置中心可以用zookeeper来实现,也可以用apllo 来实现,springcloud 也自带了配置中心config Apollo 实现分布式配置中心 zookeeper:实现分布式配置中心, ...

  7. 学习一下 SpringCloud (五)-- 配置中心 Config、消息总线 Bus、链路追踪 Sleuth、配置中心 Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  8. springcloud(七):配置中心svn示例和refresh

    上一篇springcloud(六):配置中心git示例留了一个小问题,当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,这个问题我们先放下,待会再讲.国内很多公司都使用的svn来做代码的版本控 ...

  9. springcloud(九):配置中心和消息总线(配置中心终结版)

    我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...

随机推荐

  1. Java POI导出Excel不弹框选择下载路径(下载文件不选择下载路径,默认) Chrome

    在Chrome浏览器中,Java导出Excel文件时,浏览器弹出提示框,需要选择下载路径 在Chrome中的高级设置中,把“下载前询问每个文件的保存位置”去掉就解决了 DEEPLOVE(LC)

  2. C++全排列函数next_permutation()和prev_permutation()

    头文件:#include<algorithm> * * * 1. next_permutation(): next_permutation()函数的返回类型是bool类型. 即:如果有一个 ...

  3. 当iPhone用上联发科,你还会爱上它吗?

    ​ ​ 对于苹果来说,现在正在经历史上罕见的"冰火两重天"境遇.一方面是iPhone 8系列的售价以让人瞠目结舌的速度暴跌,另一方面则是史上售价最高的iPhone X遭遇疯抢,销量 ...

  4. 给文本中的url加超级链接,同时滤过已加过链接的url

    /** * 给文本中的url加超级链接,同时滤过已有链接的url * @param string $str [description] * @return [type] [description] * ...

  5. AAAI |如何保证人工智能系统的准确性?

    ​ |如何保证人工智能系统的准确性?" title="AAAI |如何保证人工智能系统的准确性?"> ​ 注:本文译自AI is getting smarter; ...

  6. CS229 Lesson 13 高斯混合模型

    课程视频地址:http://open.163.com/special/opencourse/machinelearning.html 课程主页:http://cs229.stanford.edu/ 更 ...

  7. SGD与Adam识别MNIST数据集

    几种常见的优化函数比较:https://blog.csdn.net/w113691/article/details/82631097 ''' 基于Adam识别MNIST数据集 ''' import t ...

  8. Salesforce与微信公众号集成实现输入关键字搜索文章

    本篇参考微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html 随 ...

  9. sql的练习题

    表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_i ...

  10. 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)

    MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...