springcloud config 配置访问

springcloud http请求地址和资源文件映射如下:

/ { 应用名 } / { 环境名 } [ / { 分支名 } ]
/ { 应用名 } - { 环境名 }.yml
/ { 应用名 } - { 环境名 }.properties
/ { 分支名 } / { 应用名 } - { 环境名 }.yml
/ { 分支名 } / { 应用名 } - { 环境名 }.properties

label 分支名 配置文件的分支,默认是master。
application 应用名
profile 环境名 (dev test pro)

## 正常的访问方式
http://localhost:8002/master/mango-admin-dev.yml  
http://localhost:8002/mango-eureka/dev/master/
## 如果 spring.cloud.config.server.git.searchPaths:/** 配置时可以使用下面的方式访问配置
http://localhost:8002/mango-admin/mango-admin-dev.yml/master/mango-admin-dev.yml
http://localhost:8002/mango-eureka/mango-eureka/master/mango-eureka-dev.yml
http://localhost:8002/test/test1/master/mango-eureka-dev.yml

springcloud config配置

config 常用配置说明

spring.cloud.config.server.git.uri:配置git仓库地址
spring.cloud.config.server.git.searchPaths:配置仓库路径
spring.cloud.config.label:配置仓库的分支 (如果是是本地获取的话,则无用)
pring.cloud.config.profile:指定环境 (dev开发环境 test测试环境 prod正式环境)
spring.cloud.config.server.git.username:访问git仓库的用户名
spring.cloud.config.server.git.password:访问git仓库的用户密码

spring.cloud.config.discovery.enabled 是否从配置中心读取文件。(config client中 为true时可以替代spring.cloud.config.server.git.uri)
spring.cloud.config.discovery.serviceId 配置中心的servieId,即服务名。

本地环境 config bootstrap.yml 配置

本地confin server配置

server:
  port: 9111
spring:
  application:
    name: config-server
  profiles:
  	## 配置文件在本地
    active: native
  # 配置中心
  cloud:
    config:
      server:
      	#本地配置文件的目录
        native:
          search-locations: D:/workspace/dev/mango/config/
      # 此处的label不起作用 (native本地config sever label 不起作用)
      label: master

git仓库 config bootstrap.yml 配置

server:
  port: 9111
spring:
  application:
    name: config-server
  # 配置中心
  cloud:
    config:
      server:
        git:
          uri: xxxx
          search-paths: mango-*
          username: xxxx
          password: 123456
	      repos:
	          simple: https://github.com/simple/config-repo
	          special:
	            pattern: special*/dev*,*special*/dev*
	            uri: https://github.com/special/config-repo
	          local:
	            pattern: local*
	            uri: file:/home/configsvc/config-repo   
      # git    
      label: master
  • simple 仓库自动匹配到 simple/*
  • special 仓库的pattern,第一个是应用名以special开头,环境名以dev开头;第二个是应用名包含special,环境名以dev开头;多个匹配到同一uri的pattern用逗号分割
  • local 仓库的的pattern也会自动补全为local*/*
  • test仓库中的 pattern 是以通配符开始的,需要使用单引号
配置多个仓库时,Config Server 在启动时会直接克隆第一个仓库的配置库,其他配置库只有请求时才会clone到本地

客户端配置

configClient配置的uri和discovery方式比较

使用discovery的方式从配置中心获取配置(推荐)

server:
  port: 8001
spring:
  application:
    name: mongo-eureka
  profiles:
    active: dev
  # 配置中心
  cloud:
    config:
      # 应用名    对应 mango-eureka-dev.yml 中的 mango-eureka
      name: ${spring.application.name}
      # 环境名    对应 mango-eureka-dev.yml 中的 dev
      profile: ${spring.profiles.active}
      # 从配置中心读取文件 (必须注册到注册中心才能从获取Config配置中心获取配置)
      discovery:
        enabled: true
        # 配置中心的id 对应config sever 的 spring.application.name (使用Eureka注册中心来发现Config配置中心服务)
        service-id: config-server
      # 对应config sever 的分支   (config sever中的label指的是 远端仓库的分值;此处分支为config sever在项目的的开发分支)
      label: master
      
eureka:
 client:
   serviceUrl:
     defaultZone :  http://eureka-node1:7000/eureka/
   fetch-registry: true
   registry-fetch-interval-seconds: 8
 instance:
   prefer-ip-address: true
   lease-renewal-interval-in-seconds: 4
   lease-expiration-duration-in-seconds: 15        

使用uri的方式从配置中心获取配置

server:
  port: 8001
spring:
  application:
    name: mongo-eureka
  profiles:
    active: dev
  # 配置中心
  cloud:
    config:
      # 应用名    对应 mango-eureka-dev.yml 中的 mango-eureka
      name: ${spring.application.name}
      # 环境名    对应 mango-eureka-dev.yml 中的 dev
      profile: ${spring.profiles.active}
      # config 配置中心的地址
      uri: http://config-node1:9111
      # 对应config sever 的分支   
      label: dev      

springcloud config 配置访问_第1张图片

加密解密 (非对称加密)

java-tool生成 config-server.keystore

windos 生成 config-server.keystore

# CN 姓氏  
# OU 组织单位
# O 组织名称
# L  城市
# ST  省份
# china 国家
keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=chrislin, OU=tr, O=organization, L=city, ST=province, C=china" -keypass changeme -keystore server.jks -storepass letmein 

java keytool 参数选项:

 -alias <alias>                  要处理的条目的别名
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -sigalg <sigalg>                签名算法名称
 -destalias <destalias>          目标别名
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

示例:

## 
$ keytool -genkey -alias yushan(别名) -keypass yushan(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -keystore e:\yushan.keystore(指定生成证书的位置和证书名称) -storepass 123456(获取keystore信息的密码)

config sever 项目bootstrap.yml中添加 encrypt的配置

# 加密解密配置
encrypt:
  key-store:
    location: classpath:/server.jks  #jks文件的路径
    password: letmein                 #storepass
    alias: mytestkey                 #alias
    secret: changeme                 #keypass

完成了JCE的安装后,可以尝试启动配置中心,Spring Cloud 暴露出了几个端点
/encrypt/status:查看加密功能状态的端点
/key:查看密钥的端点
/encrypt:对请求的body内容进行加密的端点
/decrypt:对请求的body内容进行解密的端点
springcloud config 配置访问_第2张图片

问题解决

1 如果出现java.security.InvalidKeyException: Illegal key size错误
替换jdk中的C:\Program Files\Java\jdk1.8.0_65\jre\lib\security 目录下的local_policy.jar 和 US_export_policy.jar
(java8地址)下载地址:https://www.oracle.com/java/technologies/javase-jce8-downloads.html
2 如果http://localhost:8002/encrypt 一直失败 (去除 config sever的安全配置 和 config sever中的eureka client配置(如果eureka sever配置了安全认证)

参考:

SpringCloud Config Server和Client的配置使用
Spring Cloud构建微服务架构:分布式配置中心(加密解密)
java中Keytool的使用
加解密生成加密密码错误 :java.security.InvalidKeyException: Illegal key size
encrypt 加密后如何使用
微服务:整合 Spring Boot Admin - 开启Security安全认证 Security详细配置
springcloud config配置读取优先级 !!!

你可能感兴趣的:(spring)