-
将服务配置与服务代码分开
管理配置
- 分离:将服务配置信息与服务的史记物理部署完全分离开
- 抽象:将访问配置数据的功能抽象到一个服务接口中
- 集中:将应用程序配置集中在尽可能少的数据库中
- 稳定:保证高可用和冗余
配置管理架构:
解决方案:
-
配置Spring Cloud 配置服务器
使用Spring Cloud 配置服务器原因:
- 易于搭建和使用
- 与Spring Boot 紧密集成
- 提供多个后端用于存储配置数据,如果已经使用了Eureka和Consul等工具,可以直接插入配置服务器中
- 可以直接与Git集成
pom文件说明:
application.yml 告訴Spring Cloud配置服务要侦听哪个端口以及哪里可以找到配置数据的后端
-
集成Spring Boot 微服务
pom文件中此配置,告诉Spring Boot 拉取 Spring Cloud Config 客户端所需的所有依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Git集成
使用Spring Cloud配置服务器刷新属性
@RefreshScope
Spring Boot应用程序只会在启动时读取配置属性,因此Spring Cloud配置的更改不会被Spring Boot应用程序自动获取。
Spring Boot Actuator 提供了一个 @RefreshScope 注解,允许开发团队访问 /refresh 端点,这会强制Spring Boot应用程序重新
读取应用程序配置
修改后:
如果一个服务正在由多个实例正在运行,需要使用新的应用程序刷新所有这些服务,有几种方法可以解决这个问题:
- Spring Cloud Bus “推送”机制,使Spring Cloud配置服务器能够向所有使用服务的客户端发布有更改发生的消息,需要额外配置一个消息中间件运行
- 使用Spring Service Discovery 和 Eureka 来注册所有服务实例,刷新Spring Cloud配置中的应用程序属性,然后编写一个简单脚本查询服务发现引擎以查找服务的所有实例,并直接调用/refresh端点
- 重启所有服务器或容器来接受新的属性,如果用Docker中运行服务时,重新启动Docker容器差不多需要几秒,这将会强制重新读取配置信息
-
加密敏感属性
- 下载并安装加密所需的Oracle JCE jar
- 创建加密秘钥
- 加密和解密属性
- 配置微服务以在客户端使用加密
pom文件中加入依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-rsa</artifactId>
</dependency>
/encrypt 与 /decrypt 端点进行加密解密