微服务系列详解—Part 2:使用Spring Cloud Config和Vault进行配置管理

本文深入探讨了如何使用Spring Cloud Config Server进行微服务配置管理,并介绍了结合Vault存储敏感数据的方法。首先,文章解释了Spring Cloud Config解决配置动态更新的问题,接着通过创建目录服务展示如何配置Spring Cloud Config Server。随后,文章讨论了使用Vault来存储数据库凭据等敏感信息,以提高安全性。最后,文章展示了如何重构目录服务以使用Config Server和Vault,实现了微服务的外部化配置和安全数据管理。
摘要由CSDN通过智能技术生成

通过了解Spring Cloud Config Server的配置以及使用Vault存储敏感数据的方式,继续你的微服务之旅。抽丝剥茧 细说架构那些事——【优锐课】

“使用Spring Boot和Spring Cloud的微服务-第1部分:概述”中,我们简要介绍了什么是微服务以及如何使用SpringBoot和SpringCloud构建微服务。

在这篇文章中,我们将学习:
• Spring Cloud Config和Vault有什么需求?
• 如何创建我们的第一个微服务:目录服务
• 如何创建Spring Cloud Config Server
• 如何使用Vault存储敏感数据

使用Spring Boot和Spring Cloud的微服务

Spring Boot已经提供了许多选项来外部化配置属性。但是,一旦启动应用程序,你将无法在运行时更改那些属性值。你需要更新属性并重新启动应用程序,以使这些更改生效。

在微服务世界中,可能会有大量的微服务,并且这些微服务的多个实例正在运行。手动甚至使用自动脚本更新配置属性并重新启动所有这些实例可能不可行。Spring Cloud Config解决了这个问题。

我们可以创建一个Spring Cloud Config Server,该服务器提供所有微服务的配置值。我们可以使用git,svn,database或Consul作为后端来存储配置参数。然后,我们可以在我们的微服务中配置Spring Cloud Config服务器的位置,以便在启动应用程序时它将加载所有属性。除此之外,每当我们更新属性时,我们都可以在微服务中调用/ refresh REST端点,以便它可以重新加载配置更改,而无需重新启动应用程序。

在我们的应用程序中,我们还需要配置各种敏感数据,例如数据库凭据,密钥,令牌等。显然,我们不想将它们存储为纯文本格式。更好的方法是将它们以加密格式存储,并且Spring Cloud Config Server提供了加密和解密数据的功能。更好的是,我们应该使用Vault之类的安全数据存储工具。Spring Cloud还提供了与Vault的集成,因此我们可以在Vault中存储任何敏感的配置属性。

让我们从我们的第一个微服务开始,即目录服务。使用Web,JPA,MySQL,Actuator,DevTools和Lombok启动器创建一个SpringBoot应用程序。到目前为止,典型的SpringBoot应用程序还算不错。

首先,让我们实现一个REST端点以提供产品数据,然后将其重构为使用Cloud Config Server。我们将使用Docker并将MySQL作为Docker容器运行。

docker-compose.yml

version: '3'
services:
  mysqldb:
     image: mysql:5.7
     container_name: mysqldb
     ports:
       - "3306:3306"
     environment:
       MYSQL_ROOT_PASSWORD: admin
       MYSQL_DATABASE: catalog

如下配置application.properties中的数据源属性:

server.port=8181
logging.level.com.sivalabs=debug
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/catalog?useSSL=false
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
//expose all the Actuator endpoints
management.endpoints.web.exposure.include=*
创建JPA实体Product.java,如下所示:
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table(name = "products")
public class Product {
   
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(nullable = false, unique = true)
    private String code;
    @Column(nullable = false)
    private String name;
    private String description;
    private double price;
}

创建Spring Data JPA存储库ProductRepository.java,如下所示:

import com.sivalabs.catalogservice.entities.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值