当前位置:   article > 正文

springcloud config学习笔记_简述什么是spring cloud config?

简述什么是spring cloud config?

0 环境

  • 操作系统:win10
  • 编辑器:idea
  • springcloud版本:H版

1 简介

springcloud config --> 分布式系统解决方案 它包含server(配置文件)和client(获取server文件) 可以和eureka server配合使用

  • springcloud config功能:
    • 集中管理各个微服务/环境的配置文件(中央仓库 统一打包 发快递)
    • 支持多种开发语言和高并发查询
    • 提供server(服务端)和客户端(client)
    • 配置文件一经修改 可快速生效 但是client立刻生效需要中间件
    • 配置文件通过git/svn进行管理(支持版本回退)

2 git提交数据

在本地找一个位置 新建目录client1添加3个文件.properties结尾 上传到git上(最好每个文件开头名与目录全名一致) 一个文件夹代表一个微服务

git init
git add .
git commit -m "first commit"
git remote add origin xxx你的具体git地址
git push -u origin master
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

3 ConfigServer搭建

3.1 ConfigServer添加依赖

在这里插入图片描述

3.2 开启configserver

在启动类上添加注解

@SpringBootApplication
// 启动ConfigServer
@EnableConfigServer
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.3 ConfigServer yml配置

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/Abadbeginning/configRepo.git
          search-paths: client1
          ignoreLocalSshSettings: true  #为了激活基于属性的SSH配置
          # 找到本地id_rsa 将其文件cv一下
          privateKey:
            -----BEGIN OPENSSH PRIVATE KEY-----
            xxxxx
            -----END OPENSSH PRIVATE KEY-----
server:
  port: 8088
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3.4 启动configserver

在这里插入图片描述在这里插入图片描述

3.5 访问

在这里插入图片描述

  • 修改git数据 server端生效了
    在这里插入图片描述
    在这里插入图片描述
  • 访问规则
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • 1
  • 2
  • 3
  • 4
  • 5

{application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件。

{profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml 加以区分,例如application-dev.yml、application-sit.yml、application-prod.yml。

{label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。

4 ConfigClient搭建

4.1 创建springboot项目 添加configclient

在这里插入图片描述

4.2 bootstrap.yml配置

bootstrap在application配置之前 我们需要做点事情

spring:
  application:
    name: client1
  cloud:
    config:
      #http://localhost:8088/client1/prod/master
      uri: http://localhost:8088
      profile: dev
      label: master
server:
  port: 8090
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4.3 configclient controller配置

@RestController
public class HelloController {

    @Value("${milk}")
    String milk;

    @GetMapping("/hello")
    public String hello(){
        return milk;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4.4 启动config-server和config-client

在这里插入图片描述

5 ConfigServer简单配置

  • 不使用git仓库的 2种本地使用方法(2种方法别同时使用)
    • 在config-server中classpath添加xxxx.yml/properties 和以前的使用一样
    • 指定本地磁盘的位置 存放xxx.yml/properties
spring:
  # 在config-server中的classpath下寻找配置(在项目server下resources里-->xxx.yml...) 不再去git上找
#  profiles:
#  active: native
  application:
    name: config-server
  cloud:
    config:
      server:
        # 在server中 指定本地磁盘的配置文件的位置
        # 了解即可
        native:
          search-locations: file:/D:/properties/ 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6 常见加密方式简介

+ 不可逆加密
+ 可逆加密
  • 1
  • 2

6.1 不可逆加密

理论上无法根据已加密的密文推导出明文(常用算法 MD5消息摘要算法 SHA安全散列算法) --> 一般你喝了一瓶水 通过肠胃加密 不太可能再把水吐回瓶子里(再说了 肯定不是原来那个味了)

6.2 可逆加密

  • 通过加密后密文可推导出明文 可逆加密分为:
    • 对称加密
      • 加密和解密密钥是一样的(算法 aes 3des des)
    • 非对称加密
      • 加密的称为公钥 可以给任何人 解密的叫私钥(自己知) 常见算法RSA

7 对称加密

需要下载不定长的JCE
或在oracle中下载

7.1 解压

下载好JCE后 解压 并cv到下面这个目录 注意: 一开始我是在lib下创建security 后来才访问http://localhost:8088/encrypt/status时报错 搜索了才发现位置放的不对 需要在下面的目录下更改
在这里插入图片描述

7.2 在configserver中配置bootstrap.yml

# 密钥
encrypt:
  key: milk
  • 1
  • 2
  • 3

7.3 启动configserver

首先查看加密状态 ok后 然后在用postman访问解密接口在对具体数据加密存放到git上 查看结果

在这里插入图片描述
在这里插入图片描述

7.4 在postman中加密

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样被认为是字符串 需要加标识符{cipher}
例如milk={cipher}在这里将加密串cv过来

7.5 启动configserver和client并访问

config-server(文件变了 能及时感知到) client不行(后续需要用中间件等办法解决)
在这里插入图片描述

  • 需要重启client才会生效
    在这里插入图片描述

8 非对称加密

8.1 先生成密钥对

keytool -genkeypair -alias config-server -keyalg RSA -keystore D:\git\config-server.keystore
  • 1

在这里插入图片描述

8.2 在configserver中的bootstrap.yml里配置

# 密钥
#encrypt:
#  key: milk
encrypt:
  key-store:
    location: config-server.keystore
    password: 123456
    secret: 123456
    alias: config-server
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
在这里插入图片描述

8.3 防止xxx.keystore被过滤

需要在configserver pom文件build节点中配置(因为之后用一下jks 一并加上)

	  <resources>
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>**/*.properties</include>
                  <include>**/*.yml</include>
                  <include>**/*.jks</include>
             		<include>**/*.keystore</include>
              </includes>
          </resource>
      </resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

重启server
在这里插入图片描述

文件加密 并cv到git上 进行测试
在这里插入图片描述

8.4 重启/启动 config-server和config-client

在这里插入图片描述
在这里插入图片描述

9 安全管理

9.1 在config-server中添加springsecurity依赖

	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-security</artifactId>
	    <version>2.2.4.RELEASE</version>
	</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

9.2 配置yml

  • 在configserver中配置
spring:
  security:
    user:
      name: admin
      password: 123
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

  • 在configclient中这样配置会报错(很多时候会忘记了)
    在这里插入图片描述在这里插入图片描述
  • 注意:config-client springsecurity yml配置(注意是cloud config)
spring:
  cloud:
    config:
      username: admin
      password: 123
  • 1
  • 2
  • 3
  • 4
  • 5

9.3 启动configserver和client

  • 访问
    在这里插入图片描述
    在这里插入图片描述

10 服务化

10.1 分别在config-server和config-client添加eureka依赖

   <dependency>
      <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
   </dependency>
  • 1
  • 2
  • 3
  • 4

10.2 在config-server bootstrap.yml配置

配置eureka连接

eureka:
  client:
    service-url:
      #      defaultZone: http://localhost:1234/eureka
      defaultZone: http://localhost:8761/eureka
  • 1
  • 2
  • 3
  • 4
  • 5

10.3 在config-client bootstrap.yml配置

  • 在config-server bootstrap.yml中开启配置eureka连接以及服务等(config-server地址别写死 更改全)
spring:
  application:
    name: client1
  cloud:
    config:
      #http://localhost:8088/client1/prod/master
#      uri: http://localhost:8088
      profile: dev
      label: master

      username: admin
      password: 123

      # 开启通过eureka获取config-server的功能
      discovery:
        enabled: true

        # 配置config-server服务名称
        service-id: config-server
        
eureka:
  client:
    service-url:
      #      defaultZone: http://localhost:1234/eureka
      defaultZone: http://localhost:8761/eureka
server:
  port: 8090
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

10.4 启动报错

在这里插入图片描述

需要更换一种方式

keytool -genkeypair -alias new-config-server -keyalg RSA -keypass 123456 -keystore D:\git\config-server.jks -storepass 123456
  • 1
  • 在config server pom中添加
		<resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.jks</include>
<!--                    <include>**/*.keystore</include>-->
                </includes>
            </resource>
        </resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • jks(自行探索 和之前的类似)
keytool -genkeypair -alias config-server -keyalg RSA \ 
  -dname "CN=zhangmutian, OU=company, O=organization, L=city, ST=province, C=china" \
  -keypass 222222 \
  -keystore config-server.jks \
  -storepass 111111 \
  -validity 365 \
genkeypair 参数即产生一对public key和private key。
alias 指定key的别名,用于区分同一keystore中不同的key。
keyalg 指定生成key的算法,这里使用默认的RSA
dname 指定common name,即CN,用以验证key的身份。其中各项皆为自定义参数,OU为单位名称,O为组织名称,L为城市,S为省份/州,C为国家
keypass 为key的密码
keystore 为keystore的文件名
storepass 访问keystore的密码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 为了得到效果 非对称加密那部分就不用了

config-client profile: test未使用加密方式 可以快速演示效果

spring:
  application:
    name: client1
  cloud:
    config:
      #http://localhost:8088/client1/prod/master
#      uri: http://localhost:8088
      profile: test
      label: master

      username: admin
      password: 123

      # 开启通过eureka获取config-server的功能
      discovery:
        enabled: true

        # 配置config-server服务名称
        service-id: config-server


eureka:
  client:
    service-url:
      #      defaultZone: http://localhost:1234/eureka
      defaultZone: http://localhost:8761/eureka

server:
  port: 8090
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

10.5 重启

在这里插入图片描述

10.6 实现configclient感知数据更新

  • 配置文件更改
    1 config-client添加监控
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  • 1
  • 2
  • 3
  • 4

2 修改git仓库

profile test --> 值改为test123
在这里插入图片描述
3 config-client bootstrap.yml配置
监控刷新

management:
  endpoints:
    web:
      exposure:
        include: refresh
  • 1
  • 2
  • 3
  • 4
  • 5

4 post访问监控

127.0.0.1:8090/actuator/refresh 再次访问config-client 消息确实刷新了 但是还是很繁琐 需要单独一个请求
在这里插入图片描述
在这里插入图片描述

11 请求重试

请求时 可能会失败 我们可以配置一个请求重试的功能 在请求config-server失败重试 而不是在请求hello时报错

1 添加依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2 config-client bootstrap.yml配置

spring:
  application:
    name: client1
  cloud:
    config:
      #http://localhost:8088/client1/prod/master
#      uri: http://localhost:8088
      profile: test
      label: master

# 关闭 为了请求不到config-server
#      username: admin
#      password: 123

      # 开启通过eureka获取config-server的功能
      discovery:
        enabled: true

        # 配置config-server服务名称
        service-id: config-server
      # 开启失败快速响应
      fail-fast: true
      retry:
        # 请求重试的初始间隔时间
        initial-interval: 1000
        # 最大重试次数
        max-attempts: 6
        # 重试时间间隔阶乘
        multiplier: 1.1
        # 最大间隔
        max-interval: 2000

eureka:
  client:
    service-url:
      #      defaultZone: http://localhost:1234/eureka
      defaultZone: http://localhost:8761/eureka

server:
  port: 8090

management:
  endpoints:
    web:
      exposure:
        include: refresh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

在这里插入图片描述

12 小结

首先创建git项目 创建springboot项目添加configserver的依赖 添加启动注解 配置仓库基本信息 测试是否连接成功(server okle)
创建configclient项目添加configclient依赖 配置连接server具体的哪个文件的(通过一些的标识标记 写死的) 配置一个访问接口 访问server是否能显示数据
需要通过占位符对client改造 灵活访问server
2种加密方式的配置 很类似 需要配置相对应encrypt…属性 都要生成密钥对 密钥对文件不被读取 需要在build节点中配置 server没有被保护 谁都能访问 很危险不是
需要配合springsecurity 并且添加依赖配置springsecurity 注意了server --> springsecurity xxx | client --> cloud xxx
为了server和client更加方便 引入进来eureka config-client不会自动刷新 简单实现一下 之后的章节会用消息中间件完成 这里先用监控刷新 针对单个 一但接口多了肯定不合适的
在configclient调用configserver调用失败 不能失败了 还访问某个接口 需要配置重试功能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/216064
推荐阅读
相关标签
  

闽ICP备14008679号