SpringCloudConfig(配置中心)

1.为什么需要配置中心

在微服务架构中,每一个微服务都有自己的配置文件,如果每个服务自行配置,就会面临以下问题:

1.维护成本高:每次配置修改,都需要重新部署服务。

2.版本问题:同一个应用的不同实例,需要使用同一个版本,逐一部署,可能会导致版本不一致的问题。

3.安全问题:一些敏感的配置(如数据库密码)可能会泄露,缺乏安全的管理手段。

......

所有就有了配置中心,对我们项目中的配置进行统一的管理。

2.SpringCloudConfig的核心概念

1.Config Server(配置服务器)

Config Server是一个配置管理服务器,负责从各种后端存储(如Git、SVN、本地文件系统)中拉取配置信息,并提供REST API供客户端使用。

2.Config Client(配置客户端)

Config Client是应用程序中一个组件,它允许应用程序通过ConfigClient连接到ConfigServer并动态获取配置信息,客户端可以根据环境,服务名等动态选择对应的配置文件。

3.版本控制集成

Spring Cloud Config,默认使用Git作为配置存储的后端,利用Git管理配置文件的版本,通过切换版本号来获取对应环境下的配置。

3.搭建ConfigServer

1.创建项目

2.添加依赖

复制代码
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-server</artifactId>
</dependency>

3.启用ConfigServer

4.完善配置

复制代码
server:
  port: 7071
spring:
  application:
    name: config-server # 应⽤名称
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/wanghao86/config-server.git #配置⽂件Git 地址
          default-label: master #配置⽂件分⽀
          search-paths: config #配置⽂件所在根⽬录

5.初始化Git仓库

4.Config Client

1.配置管理(配置中心去配置信息)

2.添加Config的依赖

复制代码
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
<!--        bootstrap代表从外部获取配置信息就需要加-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

3.应用程序中配置 服务器的信息(服务器的地址,环境)

复制代码
spring:
  profiles:
    active: prod  #与下面的profile同时存在,以当前配置下的环境为准
  application:
    name: product-service
  cloud:
    config:
      uri: http://127.0.0.1:7071
#      profile: dev

4.测试:读取配置

复制代码
@RestController
@RequestMapping("/config")
public class ConfigController {

    @Value("${data.env}")
    private String env;

    @RequestMapping("/getEnv")
    public String getEnv() {
        return env;
    }
}

5.多平台配置

复制代码
spring:
  profiles:
    active: prod #与下面的profile同时存在,以当前配置下的环境为准
  application:
    name: product-service
#  cloud:
#    config:
#      uri: http://127.0.0.1:7071
#      profile: dev
#配置多平台
---
spring:
  config:
    activate:
      on-profile: dev
  cloud:
    config:
      uri: http://127.0.0.1:7071

---
spring:
  config:
    activate:
      on-profile: prod
  cloud:
    config:
      uri: http://127.0.0.1:7071

自动刷新

添加依赖

复制代码
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

添加注解

复制代码
@RefreshScope //自动刷新
@RestController
@RequestMapping("/config")
public class ConfigController {

    @Value("${data.env}")
    private String env;

    @RequestMapping("/getEnv")
    public String getEnv() {
        return env;
    }
}

开启端点

复制代码
#需要开启的端点, 这⾥主要⽤到的是refresh端点, 只开启这⼀个就可以, 为了⽅便, 可以开启所有端点, 除了shutdown端点
management:
  endpoint:
    shutdown:
      enabled: false
  endpoints:
    web:
      exposure:
        include: "*"

修改配置后, 发现配置并不能⽴即⽣效
需要⼿动调⽤⼀下接⼝ http://127.0.0.1:9090/actuator/refresh (POST请求)动态刷新 Spring Cloud
Config 客⼾端的配置 (客⼾端服务接⼝)

多服务实例同时刷新

如果服务⽐较多, 需要每个服务都调⽤⼀次才能⽣效,可以借助SpringCloudBus来解决.
Spring Cloud Bus 是Spring Cloud体系中的⼀个组件, 主要⽤于在集群环境中传播分布式系统的配置变更, 以及提供事件驱动的通信机制. Spring Cloud Bus 核⼼原理其实就是利⽤消息队列做⼴播,所以要先有个消息队列, ⽬前Spring Cloud Bus ⽀持两种消息代理:RabbitMQ和Kafka.
我们采⽤RabbitMQ实现.
修改配置

复制代码
spring:
  rabbitmq:
    addresses: amqp://study:study@47.108.157.13:5672/bite

添加依赖

复制代码
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

加密

在微服务开发中, 配置⽂件可能包含⼀些敏感信息, ⽐如数据库密码, API密码等, 直接明⽂存储这些信息,在配置⽂件中是⾮常危险的, 尤其是当配置⽂件存储在版本控制系统(如Git)中时. 这时候我们就需要对这些敏感信息进⾏加密。
针对这个问题, Spring Cloud Config提供了对属性进⾏加密解密的功能, 以保护配置⽂件中的敏感数据不被泄露。

复制代码
data:
  password: '{cipher}edf62f27bc6dbc7655f1acb810003eef2004d0e4bc0a3bc193b451cdd7b5648d'

对称加密

1.下载jar包



2.添加配置,设置秘钥(Config server)

3.添加依赖

复制代码
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

4.测试

使用:

在gitee修改密码的值

此处password的这个字符串的引号不能省略,加上{cipher}后面跟上原密码经过加密后的数据。

非对称加密

1.生成密钥对

复制代码
​​keytool -genkeypair -keystore D:/config-server.keystore -alias config-server -keyalg RSA -keypass config -storepass config

2.将生成的文件放到配置文件目录下

3.修改bootstrap配置文件

4.使用cmd进行加解密

5.修改gitee配置

6.测试

相关推荐
wang_yb3 小时前
数据点的“社交距离”:衡量它们之间的相似与差异
大数据·databook
小园子的小菜3 小时前
深度解析Elasticsearch网络通信原理:节点协同与链接机制
大数据·elasticsearch·搜索引擎
Tipriest_3 小时前
详细解释pip及其使用方法(对比apt)
大数据·elasticsearch·apt·pip
第二只羽毛3 小时前
外卖订餐管理系统
java·大数据·开发语言·算法
longxibo3 小时前
Ubuntu datasophon1.2.1 二开之二:解决三大监控组件安装后,启动失败:报缺失common.sh
大数据·linux·运维·ubuntu
第二只羽毛3 小时前
图书管理系统项目PPT文稿
java·大数据·开发语言·ide
_OP_CHEN3 小时前
【Git原理与使用】(六)Git 企业级开发模型实战:从分支规范到 DevOps 全流程落地
大数据·linux·git·gitee·项目管理·devops·企业级组件
知识分享小能手4 小时前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 中大数据 —语法详解与实战案例(15)
大数据·学习·centos
Jackyzhe4 小时前
Flink源码阅读:如何生成JobGraph
大数据·flink