Spring Cloud(随笔) - Config

Spring Cloud - Config


用于分布式系统中基础设施和微服务应用提供集中化的外部配置支持,分为 Config Server 与 Config Client

启用

  • config server
// import
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

// start
@SpringBootApplication
@EnableConfigServer
//@EnableEurekaClient
public class ConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class);
    }
}

// config
server:
  port: 8711
spring:
  application:
    name: spcd-config
  cloud:
    config:
      server:
        git:
          basedir: E:\log # 本地仓库保存地址
          uri: https://github.com/ZeWeStar/spring-cloud-config
          search-paths: spcd-config # 目录
          username: xxxx
          password: xxxx
          
# config server join Eureka          
eureka:
  client:
    registry-fetch-interval-seconds: 30
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/
  instance:
    lease-renewal-interval-in-seconds: 30
    lease-expiration-duration-in-seconds: 90
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}

logging:
  #level:
    #xxxx: debug
  path: E:\log\spcd
  file: ${spring.application.name}          
  • config client
// import
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

// bootstrap.yml 必须配置在 bootstrap中 Config First Bootstrap
spring:
  application:
    name: user #对应配置文件 {application}
  cloud:
    config:
      profile: dev #对应配置文件 {profile}
      label: master #对应配置文件 {label}
      uri: http://127.0.0.1:8711
      fail-fast: true # can not connect server fail startup

注意

  • git仓库中文件命名 {application}-{profile}.yml ,如 user-dev.yml
  • 访问方式 label 为git的分支(默认 master)
    • /{application}/{profile}[/{label}]
    • /{application}-{profile}.yml
    • /{label}/{application}-{profile}.yml

基础架构

在这里插入图片描述

远程Git仓库:用来存储配置文件的地方 如:user-dev.yml

ConfigServer: 分布式配置中心,连接Git仓库

本地Git仓库:client从server请求配置信息时,server从远程Git仓库获取最新版本到本地git仓库(server在临时目录维护),然后从本地仓库读取返回,当远程无法访问时,直接返回本地仓库内容。

Service A & Service B :config client 使用 bootstrap.yml指定 config server 获取配置信息。

Security

config server 配置security

// import
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
        
// set config server username & password
spring:
  security:
    user:
      name: user
      password: 123456789

config client 配置username & password

spring:
  cloud:
    config:
      username: user
      password: 123456789

注意:client 未配置正确username&password ,日志出401错误

敏感信息加密解密

配置中心放入 github 中的敏感信息,进行加密处理,例如数据库密码等。

1、首先需要准备一个不限长度的JCE版本(Java Cryptography Extension (JCE) Unlimited Strength ),在ORACLE官网下载(注意jdk版本)
在这里插入图片描述
替换$JAVA_HOME/jre/lib/security (开发中一般使用的jdk中的jre)中的的上示2个jar包。再次启动config server 显示日志
在这里插入图片描述

访问 /encrypt/status

{"description":"No key was installed for encryption service","status":"NO_KEY"}

2、配置密钥

2.1、对称性密钥 配置在 bootstrap.yml

encrypt:
  key: key123456

2.2、非对称密钥

通过JDK keytool 工具生成密钥对

$ keytool -genkeypair -alias mytestkey -keyalg RSA \
  -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \
  -keypass changeme -keystore server.jks -storepass letmein

配置在bootstrap.yml

encrypt:
  keyStore:
    location: classpath:/server.jks
    password: letmein
    alias: mytestkey
    secret: changeme

访问 /encrypt/status

{"status":"OK"}

3、配置文件中加密前缀 {cipher} 如数据库密码

spring:
  datasource:
    username: dbuser
    password: '{cipher}f8845323019d118a2155cb86f96fb2fe6390c0e7f0811fd38686136895742c3c' #zewe123456

可通过 访问接口测验加密解密
在这里插入图片描述
在这里插入图片描述

高可用配置

config server 加入 eureka中,且config client 在boostrap.yml中配置

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/

spring:
  application:
    name: user
  cloud:
    config:
      discovery:
        enabled: true
        service-id: spcd-config
      profile: test
      label: master
      #uri: http://127.0.0.1:8711
      username: user
      password: 123456789

发布了73 篇原创文章 · 获赞 78 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/SHIYUN123zw/article/details/103597921