标签:type 图片 autowired 接受 inf 经历 run 变化 ESS
一、心路历程
终于告一段落了,从开始搭建配置中心到现在,经历了心理和现实的一系列过程。
入职这家公司后,有个公司架构师给了一个基础的框架,说是用springcloud,里面切切实实是一个架子,springcloud的多个组件都没有引入(在这里提一下,这个架构是我们投资人的其他公司的技术,不属于我们公司,只是顺便带一下我们)。
看我之前的文章大家知道,业务开发中基本的springcloud zuul和feign组件是我一步一步搭建起来的。虽说对于大部分人来说很简单,但对于我来说,由于之前公司使用的是springboot,所以从接触springcloud至今还没到一年的时间。搭建起来既属于了解也属于摸索的过程。
大家知道springcloud是个全家桶模式,里面是由多个组件构成的。zuul和feign是开发业务必须的,所以早早的搭建了。其他的还在逐步完善中。因为最近在联调接口,有点时间,想起来config还没搭建,就起了念头。
前段时间搜过很多关于config的文章,都没看下去,后来就上手根据网上的步骤一步一步操作,但是有的步骤操作着操作着就断了,接下来的步骤也不一样,慢慢的搭建配置中心的事情搁置了。
最近领导让我们小组长出一份近月的工作安排,我觉得是时候将配置中心实实在在的安排进去了。接下来我耐心开始搜集相关资料,没想到当天的配置中心就进行了大概40%的样子(原谅我需要一些时间进行摸索,哈哈哈)。
到今天,大概步骤是走完了,雏形出现了。不由得感慨一下子。
有的事情需要坚持、需要耐心。记得几年前?我忘记了,当时和我老公去海南玩,每个女生都想要美美哒,但当时画眼线是我化妆道路上的一道坎,平时上班懒,加上每次画眼线就开始流眼泪,导致我一直没有学会。那次出门旅游,我又带了眼线笔,以为眼线笔又是陪伴我旅游的伙伴。记得第二天早晨出门之前,我开始洗漱化妆,试着拿出眼线笔,还是流泪,还是不行,但是我心里有个信念,我一定要学会,忍住眼泪,按照网上的步骤,眼线慢慢成形了。虽然我现在上班也不画眼线,但是我会,这很重要,至少哪天心血来潮,我可以美美的出gai。后来戴美瞳也是相同经历。其实这就是不放弃和相信的力量。我身上有太多相信的力量,以后有机会可以慢慢讲给你们。有点跑偏了。。。。。
二、懒惰的可怕
继续聊偏。。。从某个时刻起,我对生活变得太过知足。举栗子,假如是经历了一些常人没经历的事情。其实我觉得这种经历挺害人的,害我从对生活的积极追求,变成对生活的消磨。不是不再热爱生活,只是没有冲劲。其实我和我老公对比就能看的出来,因为我俩都是做技术的,而我现在还是个搬运工,他已经称为工程师了,呜呜。。。。好了,话不多说了,开始我们的配置中心步骤及我踩过的坑,有兴趣的可以关注我,等以后有机会继续聊。
三、进入正题——开始配置中心config(遇到的坑在步骤中列出,如果你在配置中有问题,参照我的步骤看能不能出坑)
来一波官方介绍:配置管理。springcloud提供服务端和客户端。服务端存储后端的默认实现使用git(github或者码云)。
白话:为了在不同的环境、不同的分支(lable没配置,我们项目不需要区分分支配置)获取不同的配置信息。
步骤开始:
1.springcloud config服务端:
新建一个service-config服务,
三个文件:启动类的文件configApplication/依赖型文件pom.xml/配置类文件application.yml
1.configApplication.java:加注解@EnableConfigServer
2.pom.xml中引入spring-cloud-config-server
3.application.yml
坑一:
用户名密码方式和公私钥方式都可以。
如果uri是https形式,那么使用用户名和密码方式即可
如果uri是ssh形式,则使用公私钥形式。
重点说下公私钥形式的坑:
首先要加上这两行:
其次:生成公私钥,私钥放到项目里,公钥放到码云的对应项目的公钥配置里(配置中心文件结构,等下有图)
此时:服务端ok了,如果启动完注册中心和配置中心,出现以下问题:
.git.privateKey‘ is not a valid private key
可能的原因一:码云不接受以-----BEGIN OPENSSH PRIVATE KEY开头的私钥形式,你需要生成以
----BEGIN RSA PRIVATE KEY开头的形式。如上图。生成命令
ssh-keygen -m PEM -t rsa -b 4096 -C "****"
可能原因二:这是我搜索出来的,private-key空格后加一个真实的 | 才行
接下来上图码云上的配置文件的结构:4个图,提示的是每次点进去的内容。注意config上的配置文件是以应用名-dev/-test/-prod.properties结尾的,就是不同环境拉不同配置
好,此时,服务端已经ok了。你可要通过请求试一下
2.客户端(业务端模块)处理:
修改三个文件,依赖型文件pom.xml、配置型文件application.yml、业务使用controller
pom.xml引入spring-cloud-starter-config
application.yml
controller:
坑二:
启动完注册中心、配置中心、在启动客户端时,如报错:
Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder ‘common_service_config‘ in value "${common_service_config}"
原因是:客户端的应用名和配置文件的应用名没有一致
本客户端的应用名为:bi-service。在配置文件里应该叫bi-service-dev.properties。如果前面不一致的话,是找不到配置文件的
坑三:刷新生效的四步
栗子:如果你修改了bi-service-dev.properties里的common_service_config=devdev,把devdev改成devdev111。如果你启动客户端bi-service服务,是可以读取到新的devdev111.但是启动客户端成本较大,我们需要实现热更新。
解决方法:(上面贴的代码里已包含)
1.客户端pom.xml中引入了spring-boot-starter-actuator。2.在controller的类上加了注解@RefreshScope。加这个的目的是为了在修改配置后不启动客户端。但此时,修改后,客户端并没有拉取到新的值。3.需要在客户端applicaiton.yml加上
此时,在所有服务运行过程中,如果你修改了bi-service-dev.properties,改成devdev111。
4.你需要在postman或者黑屏里执行
完美。此时我最近配置的config步骤和三个坑都说完了。
以上是我总结的springcloud config,以后新增组件和其他内容,还会跟大家分享,大家有什么疑问和我不对的地方,欢迎咨询和指正
跑偏聊聊??springcloud config配置中心步骤以及踩的坑
标签:type 图片 autowired 接受 inf 经历 run 变化 ESS
原文地址:https://www.cnblogs.com/sunnyguo/p/12894088.html