zoukankan      html  css  js  c++  java
  • springcloud 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
    

    在这里插入图片描述

    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);
        }
    
    }
    

    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
    

    3.4 启动configserver

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

    3.5 访问

    在这里插入图片描述

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

    {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
    

    4.3 configclient controller配置

    @RestController
    public class HelloController {
    
        @Value("${milk}")
        String milk;
    
        @GetMapping("/hello")
        public String hello(){
            return milk;
        }
    
    }
    

    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/ 
    

    6 常见加密方式简介

    + 不可逆加密
    + 可逆加密
    

    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
    

    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:gitconfig-server.keystore
    

    在这里插入图片描述

    8.2 在configserver中的bootstrap.yml里配置

    # 密钥
    #encrypt:
    #  key: milk
    encrypt:
      key-store:
        location: config-server.keystore
        password: 123456
        secret: 123456
        alias: config-server
    

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

    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>
    

    在这里插入图片描述

    重启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>
    

    9.2 配置yml

    • 在configserver中配置
    spring:
      security:
        user:
          name: admin
          password: 123
    

    在这里插入图片描述

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

    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>
    

    10.2 在config-server bootstrap.yml配置

    配置eureka连接

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

    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
    

    10.4 启动报错

    在这里插入图片描述

    需要更换一种方式

    keytool -genkeypair -alias new-config-server -keyalg RSA -keypass 123456 -keystore D:gitconfig-server.jks -storepass 123456
    
    • 在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>
    
    • 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的密码
    
    • 为了得到效果 非对称加密那部分就不用了

    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
    

    10.5 重启

    在这里插入图片描述

    10.6 实现configclient感知数据更新

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

    2 修改git仓库

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

    management:
      endpoints:
        web:
          exposure:
            include: refresh
    

    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>
    

    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
    

    在这里插入图片描述

    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调用失败 不能失败了 还访问某个接口 需要配置重试功能

    作者:以罗伊
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Debian9 升级至 Debian10
    FastApi学习(二)
    FastApi学习(一)
    uber_go_guide解析(三)(规范)
    uber_go_guide解析(二)
    uber_go_guide解析(一)
    Docker踩过的坑
    Goland 设置代码格式化
    Nginx集成Naxsi防火墙
    ubuntu14中配置tomcat8
  • 原文地址:https://www.cnblogs.com/my-ordinary/p/12583196.html
Copyright © 2011-2022 走看看