SpringCloud学习(九)SpringCloudConfig的配置及使用
1、SpringCloudConfig的作用
优点,各个配置文件可以统一被管理,而且配置更新后,无需重启服务,且配置中心可进行高可用集群
2、创建Spring-Cloud-Config-Server工程项目
配置pom信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.liulin</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-config-server</name>
<description>SpringCloud聚合学习工程之配置中心服务</description>
<parent>
<groupId>cn.liulin</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>spring-cloud-integration</artifactId>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 配置中心依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
配置application.yml信息
server:
port: 8767
eureka:
client:
service-url:
defaultZone: http://localhost:9999/eureka/
spring:
application:
name: spring-cloud-config-server
cloud:
config:
server:
git:
#服务的git仓库地址
uri: https://github.com/LLBlood/spring-cloud-integration-config-repo
#配置文件所在的目录
search-paths: /**
#配置文件所在的分支
label: master
#git仓库的用户名
username:
#git仓库的密码
password:
启动实例加注解
向git配置中心仓库添加文件
spring-cloud-demo1-dev.yml
name: lisi
age: 18
sex: man
version: dev
spring-cloud-demo1-prod.yml
name: lna
age: 22
sex: woman
version: prod
启动项目,访问接口
http://127.0.0.1:8767/spring-cloud-demo1/dev
或 http://127.0.0.1:8767/spring-cloud-demo1-dev.yml
或 http://127.0.0.1:8767/master/spring-cloud-demo1-dev.yml
可获取对应返回信息,即配置中心配置成功
证明配置服务中心可以从远程程序获取配置信息,http请求地址和资源文件映射如下:,可参考
· /{application}/{profile}[/{label}]
· /{application}-{profile}.yml
· /{label}/{application}-{profile}.yml
· /{application}-{profile}.properties
· /{label}/{application}-{profile}.properties
application即文件应用名, profile就是dev/prod后缀名,label则是分支名
3、改造Spring-cloud-demo1为配置中心客户端
添加pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
增加bootstrap.yml配置信息,bootstrap.yml比application.yml优先加载
application.yml配置
server:
port: 8762
spring:
application:
name: spring-cloud-demo1
bootstrap.yml配置
eureka:
client:
service-url:
defaultZone: http://localhost:9999/eureka/
spring:
cloud:
config:
#配置文件所在分支
lable: master
profile: prod
# #配置服务中心
# uri: http://localhost:8767/
#discovery必须在该工程注册到eureka中后才能起效果
discovery: #配置服务发现
enabled: true #是否启动服务发现
serviceId: spring-cloud-config-server #服务发现(eureka)中,配置中心(config server)的服务名
其中有两种配置中心的加载方法
uri和discovery
添加数据读取类
package cn.liulin.springclouddemo1.configuration;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* cn.liulin.springclouddemo1.configuration$
*
* @author ll
* @date 2021-02-24 16:17:24
**/
@Configuration
@Data
public class SpringCloudDemoConfig {
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@Value("${sex}")
private String sex;
@Value("${version}")
private String version;
@Override
public String toString() {
return "SpringCloudDemoConfig{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", version='" + version + '\'' +
'}';
}
}
@RequestMapping("/getConfigInfo")
public String getConfigInfo() {
return springCloudDemoConfig.toString();
}
4、启动服务注册中心,配置中心服务,配置中心客户端
访问http://127.0.0.1:8762/getConfigInfo
配置中心服务有效
5、SpringCloudConfig配置文件内容加密解密
1、对称加密
java本身提供了一套用于加密解密的包JCE(Java Cryptography Extension),这些包提供对称、非对称、块和流密码的加密支持,但是默认的JCE是有长度限制的,需要下载不限长度的JCE
适用JDK8的JCE补丁,需要oracle账号
将 local_policy.jar 和 US_export_policy.jar 两个文件拷贝到 JDK 的安装目录下,具体位置是 %JAVA_HOME%\jre\lib\security ,如果该目录下有同名文件,则直接覆盖即可。
然后在之前的Spring-cloud-config-server工程中添加bootstrap.yml配置文件,添加配置内容
encrypt:
key: 666666
再启动项目,访问url: 127.0.0.1:8767/encrypt/status
如果访问这个接口返回的是ok,说明是没有问题的
测试加密解密
对普通文本zhazhazha加密
post访问url: http://127.0.0.1:8767/encrypt
然后进行结果反解密
post访问url: http://127.0.0.1:8767/decrypt
加密解密成功
在git仓库中,修改配置文件为加密字符串,需要添加前缀{cipher}
name: '{cipher}f772f183d2cbd8f83e160f54cda6f65f19a2d4ac1365e5f08a42aff6ee459d93'
age: 18
sex: man
version: dev
启动Spring-cloud-demo1工程,访问url: http://127.0.0.1:8762/getConfigInfo
加密解密成功!
2、非对称加密
非对称加密要求我们先有一个密钥,密钥的生成我们可以使用 JDK 中自带的 keytool。keytool 是一个 Java 自带的数字证书管理工具 ,keytool 将密钥(key)和证书 (certificates) 存在一个称为 keystore 的文件中
cmd生成密钥命令
keytool 所在位置 %JAVA_HOME%\jre\bin
keytool -genkeypair -alias config-server -keyalg RSA -keystore D:\keyStore\config-server.keystore
- genkeypair 表示生成密钥对
- alias 表示 keystore 关联的别名
- keyalg 表示指定密钥生成的算法
- keystore 指定密钥库的位置和名称
密钥库口令自定义,此时为123456
将D:\keyStore\config-server.keystore文件直接拷贝到spring-cloud-config-server项目的 resources 下
在 spring-cloud-config-server 的 bootstrap.yml 文件中,添加如下配置
encrypt:
#签名证书
key-store:
#别名
alias: config-server
location: config-server.keystore
password: 123456
secret: 123456
启动项目
访问加密接口: http://127.0.0.1:8767/encrypt
访问解密接口: http://127.0.0.1:8767/decrypt
在git仓库中,修改配置文件为加密字符串,需要添加前缀{cipher}
name: '{cipher}AQBGu3szNse3TLS7ZZPlNM4+RevY7NZHBzOj0m6Q3110Y3jXarU8Q8X/jRri1NeIjJgKpSoDtcuz/bigeDu7pBesV/hCOOJPjxjou5z/aHB7Lj2E+aAMKnxCvMf2HYqBQ0vecbY7rAJHj+ChA1GmJ7nBPR2GBpZT5ShyHlpaPGthYpiVuwI2wQfWs6w5OLzM5Cjp1zLRFEt70BJdK4c5L711xufEENjweaZXnqf/NbUWH/oQ8UsFCkODGhuvu+6cmLZIogRsdFuHUWmidb0r4dewfD1PWewyQOrsT5ItaLwK/6wEJA1p8oprpsWKZF7hdXyf65SpIT3ittgmeomaL0N70efOtZfgW2SWIonsqMp9+cxSPPTeYextRRD/3BlmEhM='
age: 18
sex: man
version: dev
启动Spring-cloud-demo1工程,访问url: http://127.0.0.1:8762/getConfigInfo
加密解密成功!