跑偏聊聊??springcloud config配置中心步骤以及踩的坑
2021-01-21 18:14
标签: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@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigApplication{
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri: git@gitee.com:********.git(放配置文件的码云地址,ssh类型的)
searchPaths: tms-config/{application}(tms-config是文件夹,application是每个服务的名字,自动获取,你也可以写死例如bi-service,代表这个服务的所有配置,我这边是通过{application}来获取客户端名称匹配文件夹.下边有截图呼应)
strict-host-key-checking: false
ignore-local-ssh-settings: true
private-key: |
-----BEGIN RSA PRIVATE KEY-----
MIIJKwIBAAKCAgEA5/4250BoXVUpkLhcePM333ZRxm565XvhnspHOi/PrwjQp0H8
.........
-----END RSA PRIVATE KEY-----
#username:
#password:
server:
port: 8888
# 配置服务注册中心
eureka:
client:
serviceUrl:
defaultZone: http://eureka-server:8761/eureka/
strict-host-key-checking: false
ignore-local-ssh-settings: true
management:
endpoints:
web:
exposure:
include: refresh,health,info
spring:
application:
name: bi-service
cloud:
config:
discovery:
enabled: true
service-id: config-server(可用下边的uri代替)
profile: dev //环境配置
# uri: http://localhost:8888(可用service-id: config-server代替)
server:
port: 8084
@RefreshScope
@RequestMapping("/api/bi/biDictionary")
@RestController
public class BiDictionaryController {
@Value("${common_service_config}")
private String configInfo;
@GetMapping("/baseData")
public String getaaa(){
System.out.print(configInfo);
}
}
management:
endpoints:
web:
exposure:
include: refresh,health,info
curl -X POST http://localhost:8084/actuator/refresh。注意域名和ip是客户端的。执行后,你在客户端controller下次获取到的值就变成devdev111.
文章标题:跑偏聊聊??springcloud config配置中心步骤以及踩的坑
文章链接:http://soscw.com/index.php/essay/45083.html