视频学习地址:https://www.bilibili.com/video/BV18E411x7eT
源码地址:https://gitee.com/zhu_xinmiao/springcloud
spring cloud版本:H版
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d27c1fcd546b594725d2a5fbbadf2608.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/96cd4ecf4d8475c77317790ce5c488db.png)
Config控制中心搭建
-
写pom
主要新增以下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
热部署可根据自己的需求选择加或不加:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
-
配yml
server: port: 3344 spring: application: name: cloud-config-center cloud: config: server: git: uri: https://gitee.com/zhu_xinmiao/Springcloud-Config.git #gitee上的git仓库名 search-paths: - springcoud-config #读取分支 label: master eureka: client: service-url: defaultZone: http://localhost:7001/eureka
gitee仓库里的配置文件如果不修改,直接填别人的地址也是可以访问的,但后续如果需要自己修改配置内容,则还是需要自己建一个仓库来修改。
-
建git仓库(主要是git方面的操作,不是这次学习的重点)
我是fork了https://gitee.com/exclusiver/springcloud-config这位大佬写好的代码,然后本地仓库clone了一下,再上传到自己的gitee仓库。
本地上传可以参考https://blog.csdn.net/sclibingqing/article/details/81179470。
在上传的过程中,最后一步push我始终没有反应,研究很久也没弄懂,最后直接强制上传git push -u origin2 master -f
origin2 是我自己改的名字,一般都是origin。
-
写主启动类
@SpringBootApplication @EnableConfigServer public class ConfigCenterMain3344 { public static void main(String[] args) { SpringApplication.run(ConfigCenterMain3344.class); } }
-
修改hosts文件(也可不修改,访问时对应的域名用localhost替代即可)
127.0.0.1 config-3344.com
-
访问http://config-3344.com:3344/master/config-dev.yml,得到配置文件中的信息即代表配置成功。
-
另一种访问形式
默认访问的分支是yml中配置的分支
#读取分支 label: master
-
第三种访问形式,分支写在最后面,返回的是json字符串形式,需要自己解析。
-
-
总结
Config客户端配置和调试
-
写pom,新引入以下依赖,注意没有server
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
-
写yml,这里用到了bootstrap.yml
server: port: 3355 spring: application: name: config-client cloud: config: label: master name: config profile: dev uri: http://localhost:3344 # 上述四个综合将会拼成http://config-3344.com:3344/master/config-dev.yml eureka: client: service-url: defaultZone: http://localhost:7001/eureka
-
主启动类
@SpringBootApplication @EnableEurekaClient public class ConfigClientMain3355 { public static void main(String[] args) { SpringApplication.run(ConfigClientMain3355.class); } }
-
controller类,去访问yml配置文件中的内容,去读取3344
@RestController public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/configInfo") public String getConfigInfo(){ return configInfo; } }
-
测试http://localhost:3355/configInfo,看是否能得到对应的3344gitee中的内容。
-
但这还存在着以下问题:
Config动态刷新
-
加入以下依赖,这个依赖表示我这个微服务能被别人监控
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-
修改yml,暴露监控端口
# 暴露监控端点 management: endpoints: web: exposure: include: "*"
-
业务类加上注解@RefreshScope,它具备刷新功能
-
gitee上修改version后发现不重启3355的情况下仍然没有刷新,是因为这里需要运维发一下post请求去刷新一下客户端,这时不用重启微服务就能动态刷新,模仿运维的测试命令如下:
- 打开cmd,输入curl -X POST “http://localhost:3355/actuator/refresh”
这时再去刷新3355,在没有重启的情况下,版本也能对应gitee中的version进行刷新。
总结
总的来说,config为微服务提供了一个外部配置的渠道,而不用频繁的修改yml。但是尽管引入了动态刷新方法,当有多个配置客户端要调取3344时,那就需要多次发送post请求,并且,如果利用编写脚本循环来发送,对于精确选择部分客户端更新有很大的困难。
这就引出了下一部分要学习的内容,bus消息总线。