赞
踩
- 操作系统:win10
- 编辑器:idea
- springcloud版本:H版
springcloud config --> 分布式系统解决方案 它包含server(配置文件)和client(获取server文件) 可以和eureka server配合使用
在本地找一个位置 新建目录client1添加3个文件.properties结尾 上传到git上(最好每个文件开头名与目录全名一致) 一个文件夹代表一个微服务
git init
git add .
git commit -m "first commit"
git remote add origin xxx你的具体git地址
git push -u origin master
在启动类上添加注解
@SpringBootApplication
// 启动ConfigServer
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
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
/{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 来控制访问不同的配置文件了。
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
@RestController
public class HelloController {
@Value("${milk}")
String milk;
@GetMapping("/hello")
public String hello(){
return milk;
}
}
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/
+ 不可逆加密
+ 可逆加密
理论上无法根据已加密的密文推导出明文(常用算法 MD5消息摘要算法 SHA安全散列算法) --> 一般你喝了一瓶水 通过肠胃加密 不太可能再把水吐回瓶子里(再说了 肯定不是原来那个味了)
下载好JCE后 解压 并cv到下面这个目录 注意: 一开始我是在lib下创建security 后来才访问
http://localhost:8088/encrypt/status
时报错 搜索了才发现位置放的不对 需要在下面的目录下更改
# 密钥
encrypt:
key: milk
首先查看加密状态 ok后 然后在用postman访问解密接口在对具体数据加密存放到git上 查看结果
这样被认为是字符串 需要加标识符{cipher}
例如milk={cipher}在这里将加密串cv过来
config-server(文件变了 能及时感知到) client不行(后续需要用中间件等办法解决)
keytool -genkeypair -alias config-server -keyalg RSA -keystore D:\git\config-server.keystore
# 密钥
#encrypt:
# key: milk
encrypt:
key-store:
location: config-server.keystore
password: 123456
secret: 123456
alias: config-server
需要在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上 进行测试
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
spring:
security:
user:
name: admin
password: 123
spring:
cloud:
config:
username: admin
password: 123
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置eureka连接
eureka:
client:
service-url:
# defaultZone: http://localhost:1234/eureka
defaultZone: http://localhost:8761/eureka
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
需要更换一种方式
keytool -genkeypair -alias new-config-server -keyalg RSA -keypass 123456 -keystore D:\git\config-server.jks -storepass 123456
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.jks</include>
<!-- <include>**/*.keystore</include>-->
</includes>
</resource>
</resources>
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
<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 消息确实刷新了 但是还是很繁琐 需要单独一个请求
请求时 可能会失败 我们可以配置一个请求重试的功能 在请求config-server失败重试 而不是在请求hello时报错
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
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
首先创建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调用失败 不能失败了 还访问某个接口 需要配置重试功能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。