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

通过了解Spring Cloud Config Server的配置以及使用Vault存储敏感数据的方式,继续你的微服务之旅。抽丝剥茧 细说架构那些事——【优锐课】在“使用Spring Boot和Spring Cloud的微服务-第1部分:概述”中,我们简要介绍了什么是微服务以及如何使用SpringBoot和SpringCloud构建微服务。在这篇文章中,我们将学习:• Spring Clou...
摘要由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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值