热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud学习笔记分布式配置中心config

1.简介SpringCloudConfig是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。它由服务端和客户端构成:其中,服务端也




1. 简介

Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。
它由服务端和客户端构成:
其中,服务端也称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库、为客户端提供支持;
客户端则一般是各个微服务应用本身,它们通过指定服务端来管理自身的配置。
Spring Cloud Config默认支持Git作为配置仓库,存储各个微服务的配置信息,同时也能支持其他的存储方式,如:码云、SVN、本地化文件系统。


2. 服务端配置

使用码云仓库作为“配置文件管理中心”,对配置文件进行统一管理。


  1. 创建码云账号,并新建仓库springcloud-config,可以设置为私密库
    在这里插入图片描述

  2. 安装git,并配置码云账户信息

  3. 使用git,拉取仓库,在仓库中创建配置文件后,提交新建的配置文件信息到码云仓库
    在这里插入图片描述

config-dev.yml

config:
info: "master branch,springcloud-config/config-dev.yml version=1"

config-prod.yml

config:
info: "master branch,springcloud-config/config-prod.yml version=1"

config-test.yml

config:
info: "master branch,springcloud-config/config-test.yml version=1"

  1. idea集成git
    在这里插入图片描述

  2. 创建module,添加配置中心的核心pom引用
    在这里插入图片描述

<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>

  1. 主启动类使用注解&#64;EnableConfigServer开启配置中心

&#64;SpringBootApplication
&#64;EnableConfigServer
public class MainAppConfigCenter3344 {
public static void main(String[] args) {
SpringApplication.run(MainAppConfigCenter3344.class,args);
}
}

  1. 在application.yaml中配置相关信息&#xff0c;并将配置中心微服务注册到注册中心

server:
port: 3344
spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: https://gitee.com/qianghao/springcloud-config.git #GitHub上面的git仓库名字
####搜索目录
search-paths:
- springcloud-config
username: 你的码云账号
password: 你的码云密码
label: master
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://eureka-server-7001:7001/eureka/

  1. 修改本机Windows下的hosts文件&#xff0c;添加域名映射&#xff0c;启动注册中心和配置中心&#xff0c;使用http://config-3344.com:3344/master/config-dev.yml访问配置文件

127.0.0.1 config-3344.com

测试&#xff1a;
在这里插入图片描述


  1. 配置读取规则&#xff1a;
    /{label}/{application}-{profile}.yml&#xff08;推荐&#xff09;&#xff0c;例如&#xff1a;
    master分支

  • http://config-3344.com:3344/master/config-dev.yml
  • http://config-3344.com:3344/master/config-test.yml
  • http://config-3344.com:3344/master/config-prod.yml
    dev分支
  • http://config-3344.com:3344/dev/config-dev.yml
  • http://config-3344.com:3344/dev/config-test.yml
  • http://config-3344.com:3344/dev/config-prod.yml

3. 客户端配置

1. 新建客户端功能测试module&#xff1a;cloud-config-client-3355
2. 引入配置中心客户端的核心依赖&#xff1a;spring-cloud-starter-config

<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>

3. 创建系统级配置文件bootstrap.yaml

这里需要引入一个新的概念&#xff1a;系统级的资源配置项 - bootstrap.yaml

3.1. 加载顺序
若application.yml 和bootstrap.yml 在同一目录下&#xff1a;bootstrap.yml 先加载 application.yml后加载

bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。
3.2. 配置区别
bootstrap是spring cloud的配置上下文加载。由spring-cloud-content包加载。

bootstrap.yml 和 application.yml 都可以用来配置参数。

bootstrap.yml 用来程序引导时执行&#xff0c;应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置&#xff0c;这些参数一般是不会变动的。一旦bootStrap.yml 被加载&#xff0c;则内容不会被覆盖。

application.yml 可以用来定义应用级别的&#xff0c; 应用程序特有配置信息&#xff0c;可以用来配置后续各个模块中需使用的公共参数等。
3.3. 属性覆盖问题
启动上下文时&#xff0c;Spring Cloud 会创建一个 Bootstrap Context&#xff0c;作为 Spring 应用的 Application Context 的父上下文。

初始化的时候&#xff0c;Bootstrap Context 负责从 外部源 加载 配置属性解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级&#xff0c;默认情况下&#xff0c;它们不会被本地配置覆盖。

也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致&#xff0c;application 也不会覆盖 bootstrap&#xff0c;而 application.yml 里面的内容可以动态替换。

4. 因此我们需要从外部文件获取配置信息时&#xff0c;使用bootstrap.yaml就非常必要了。
创建bootstrap.yaml并写入以下配置&#xff1a;

server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合&#xff1a;master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
uri: http://config-3344.com:3344 #配置中心地址k
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://eureka-server-7001:7001/eureka/

5. 配置主启动类

&#64;SpringBootApplication
&#64;EnableEurekaClient
public class ConfigClientMain3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3355.class,args);
}
}

6. 编写业务类&#xff0c;获取配置信息

&#64;RestController
public class ConfigClientController {
&#64;Value("${config.info}")
private String configInfo;
&#64;GetMapping("/configInfo")
private String getConfigInfo(){
return configInfo;
}
}

7. 测试获取配置信息&#xff1a;http://localhost:3355/configInfo
在这里插入图片描述


4. 动态刷新配置信息

从上面bootstrap.yaml的介绍可以知道&#xff0c;它的优先级比较高&#xff0c;配置信息加载后一般是不会被覆盖&#xff0c;比如&#xff1a;


  • 我们现在对码云上的的配置文件内容做调整
  • 刷新3344&#xff0c;发现ConfigServer配置中心立刻响应
  • 刷新3355&#xff0c;发现ConfigClient客户端没有任何响应
  • 3355没有变化除非自己重启或者重新加载

如果需要重新加载配置信息就需要重新启动服务&#xff0c;这是非常不友好的。这时我们就需要一种可以动态刷新配置的方法 - actuator监控服务。


  1. 引入actuator监控服务的pom依赖&#xff1a;spring-boot-starter-actuator

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>

  1. 在yaml中配置 actuator&#xff0c;添加暴露监控端口配置&#xff1a;

# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"

  1. 修改业务类

&#64;RestController
&#64;RefreshScope
public class ConfigClientController {
&#64;Value("${config.info}")
private String configInfo;
&#64;GetMapping("/configInfo")
private String getConfigInfo(){
return configInfo;
}
}

  1. 发送刷新请求&#xff0c;Post方式请求刷新3355

curl -X POST "http://localhost:3355/actuator/refresh

  1. 测试&#xff1a;修改码云上的配置文件内容&#xff0c;并提交修改。然后发送post请求进行刷新&#xff0c;之后就可以获取最新的配置文件信息
    在这里插入图片描述

  2. 现在产生了新的问题&#xff1a;
    假如有多个微服务客户端3355/3366/3377怎么办&#xff1f;难道每个微服务都要进行请求刷新一次&#xff1f;
    可否广播&#xff0c;一次通知&#xff0c;处处生效? Bus消息总线就可以实现







推荐阅读
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 编程心得:精选5.20告白代码,助你赢得佳人芳心,单身人士速来取经!
    编程心得:精选5.20告白代码,助你赢得佳人芳心,单身人士速来取经! ... [详细]
  • 这篇文章将为大家详细讲解有关SpringCloudConfig如何实现分布式配置中心,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • Spring Boot 和 Spring Cloud 是 Spring 生态系统中的重要组成部分,各自具有独特的特性和应用场景。Spring Boot 通过简化配置和自动配置机制,显著提高了开发和部署效率,减少了传统 Spring 应用中繁琐的 XML 配置文件需求。而 Spring Cloud 则在此基础上进一步提供了分布式系统的解决方案,包括服务发现、配置管理、断路器等高级功能,适用于微服务架构的构建和管理。本文将深入探讨两者的核心差异,并分析其各自的最佳应用场景。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • OpenCV 2.4.9 源码解析:级联分类器的错误率与尺寸分析 ... [详细]
  • 在 Virtmanager 图形界面中使用桥接网络
    在Virt-manager图形界面中使用桥接网络(bridgednetworking)2012-09-0315:40:23标签:virtm ... [详细]
author-avatar
觉悟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有