详解spring cloud config实现datasource的热部署

详解Spring Cloud Config实现Datasource的热部署

前言

Spring Cloud Config是一个分布式配置中心,它可以将应用的配置集中管理并进行统一的配置管理。在一些场景下,我们需要配置信息能够动态变更,而这时我们便需要将配置文件的热部署进行实现。 在这篇文章中,我们将详细讲解如何使用Spring Cloud Config实现Datasource的热部署。

步骤

步骤一:添加依赖

在工程的pom文件中添加如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>3.2.0</version>
</dependency>

步骤二:配置文件

在配置文件中添加如下配置:

spring:
  application:
    name: datasource-demo
  cloud:
    config:
      uri: http://config-server:8888
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      pool-name: HikariCP
      maximum-pool-size: 10
      max-lifetime: 30000
      leak-detection-threshold: 60000
      idle-timeout: 10000

spring.cloud.config.uri 表示配置服务的地址,spring.datasource 表示数据源的配置,其中 type 需要指定为 com.zaxxer.hikari.HikariDataSource,以启用 Hikari 连接池的支持。

步骤三:配置服务端

新建Spring Boot项目用于作为配置中心(config-server),并添加如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

application.yml 中添加如下配置:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/username/repo.git
          search-paths: '{profile}'
          username: ${GIT_USERNAME}
          password: ${GIT_PASSWORD}

其中 spring.cloud.config.server.git.uri 表示配置文件所在的Git仓库地址, spring.cloud.config.server.git.search-paths 表示配置文件所在的目录,在这里可以使用占位符 {profile} 来指定配置在仓库中应该存在哪个文件夹下,方便不同环境下的管理。

步骤四:配置客户端

在项目中添加如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

bootstrap.yml 中添加如下配置:

spring:
  application:
    name: datasource-demo
  cloud:
    config:
      uri: http://config-server:8888
      profile: dev
      label: master

其中 spring.cloud.config.label 表示从Git仓库中那个分支获取配置文件,spring.cloud.config.profile 表示要获取的配置文件所在的文件夹。

步骤五:配置监听器

ApplicationContext 中添加 @RefreshScope 注解和监听配置刷新事件的监听器,如下所示:

@Component
@RefreshScope
public class DataSourceRefreshListener {

    private static Logger logger = LoggerFactory.getLogger(DataSourceRefreshListener.class);

    @Autowired
    DataSource dataSource;

    @EventListener
    public void refresh(ConfigRefreshEvent e) {
        try (
            Connection conn = dataSource.getConnection();
            Statement stmt = conn.createStatement()
        ) {
            ResultSet rs = stmt.executeQuery("select 1");
            if (rs.next()) {
                logger.info("Refresh Datasource Success!");
            }
        } catch(SQLException ex) {
            logger.error("Refresh Datasource Failed. Error: {}", ex.getMessage());
        }
    }
}

在监听器实现类中,我们使用 @Autowired 注解注入 DataSource,并在 @EventListener 注解的方法中通过 getConnection() 方法获取连接,从而判断连接是否可用,若可用则表示配置刷新成功。

示例说明

示例一:本地测试

我们可以在本地测试环境中进行测试,具体步骤如下:

  • 启动config-server项目。
  • 执行maven命令mvn spring-boot:run启动datasource-demo项目,之后会输出“ Refresh Datasource Success!”。
  • 修改配置文件中的数据库名和用户名等信息,再执行POST http://localhost:8080/actuator/refresh请求,等待数秒后,输出“Refresh Datasource Success!”,表示配置已经成功刷新。

示例二:Docker Compose 测试

我们可以使用 Docker Compose 进行测试,具体步骤如下:

  • 将上述准备好的项目和配置文件保存,创建 docker-compose.yml 文件,内容如下:
version: '3'
services:
  config-server:
    build:
      context: ./config-server
    ports:
        - "8888:8888"
    environment:
      GIT_USERNAME: your-github-username
      GIT_PASSWORD: your-github-password
    volumes:
      - ./config:/config
  datasource-demo:
    build:
      context: ./datasource-demo
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: docker
    depends_on:
      - config-server
  • 在终端中进入到该文件所在的文件夹下,执行 docker-compose up 命令,等待容器启动成功。
  • 修改 config 文件夹中的配置文件,将数据库名和用户名等信息修改,保存后观察 datasource-demo 日志的输出,可以看到输出了 "Refresh Datasource Success!",表示配置已经成功刷新。

总结

通过以上步骤,我们就可以成功实现Spring Cloud Config客户端的配置文件热部署。而在外部配置服务(config-server)中对配置文件进行修改后,只需执行一次刷新请求,即可将最新的配置文件信息更新到客户端中。 该方法的好处在于,保证配置的一致性,提高了系统的可靠性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解spring cloud config实现datasource的热部署 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 解决springboot的JPA在Mysql8新增记录失败的问题

    针对Spring Boot的JPA在MySQL 8新增记录失败的问题,可以采取以下步骤进行解决: 问题原因 在MySQL 8的版本中,密码加密方式由以前的mysql_native_password改成了新的加密方式caching_sha2_password,由此就导致了Spring Boot的JPA在MySQL 8新增记录失败的问题。 解决方法 修改MySQ…

    Java 2023年5月20日
    00
  • JavaSpringBoot报错“TypeMismatchException”的原因和处理方法

    原因 “TypeMismatchException” 错误通常是以下原因引起的: 参数类型不匹配:如果您的参数类型不匹配,则可能会出现此错误。在这种情况下,您需要检查您的参数类型并确保它们匹配。 参数格式不正确:如果您的参数格式不正确,则可能会出现此错误。在这种情况下,您需要检查您的参数格式并确保它们正确。 解决办法 以下是解决 “TypeMismatchE…

    Java 2023年5月4日
    00
  • Java实现简单的表达式计算器功能示例

    Java实现简单的表达式计算器功能示例 在本攻略中,我们将介绍如何使用Java实现一个简单的表达式计算器。该计算器可以接受简单的算术表达式,并返回计算结果。我们将使用Java编程语言,其中包含有关如何使用Java变量、表达式、运算符和控制流的信息。 步骤1:创建项目并编写基本代码 你可以使用任何你熟悉或喜欢的Java开发工具来创建一个新项目。在这个项目中,你…

    Java 2023年5月18日
    00
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    先介绍一下Java生成验证码的基本流程: 随机生成字符或数字。 使用随机字体样式和大小。 创建画布,设置画布大小、背景色和边框。 在画布上绘制字符和干扰线等图形。 输出验证码图片。 下面我们来看一个完整的Java随机生成验证码的代码示例: package com.example; import java.awt.Color; import java.awt.…

    Java 2023年6月15日
    00
  • Java线程(Thread)四种停止方式代码实例

    Java线程(Thread)四种停止方式代码实例 在Java语言中,线程是非常常见的概念。在多线程编程过程中,需要经常使用到线程的停止操作。Java线程的停止方法有四种,分别是: 调用stop方法停止线程 使用interrupt方法打断线程 使用volatile布尔变量作为停止标志 使用线程阻塞等待退出 下面详细介绍这四种方式的代码实例。 1. 调用stop…

    Java 2023年5月18日
    00
  • Java Spring中Bean的作用域及生命周期

    当我们在使用Java Spring框架的时候,经常会听到Bean这个词。Bean是Java Spring框架中的一个基础概念,每一个Bean实际上就是一个Java对象。在Spring中,Bean有不同的生命周期和作用域,这些都是我们必须了解的。 1. Bean的生命周期 Bean的生命周期主要分为三个部分:实例化、初始化和销毁。 1.1 实例化 在Sprin…

    Java 2023年5月19日
    00
  • java实现同态加密算法的实例代码

    为了更好地讲解如何实现Java同态加密算法的实例代码,我们需要从以下几个方面展开: 同态加密算法的概念和原理; Java同态加密算法的基本要求和相关技术准备; Java实现同态加密算法的实例代码。 同态加密算法的概念和原理 同态加密算法是一种特殊的加密算法,能够在加密的同时进行相关计算,得到加密结果,然后再解密得到计算结果。这种加密算法可以支持加法和乘法等基…

    Java 2023年5月18日
    00
  • 利用apache ftpserver搭建ftp服务器的方法步骤

    下面我将详细讲解利用Apache FtpServer搭建FTP服务器的方法步骤,包括以下内容: 安装Java环境 下载Apache FtpServer 配置Apache FtpServer 启动FTP服务器 如何连接FTP服务器 示例使用 1. 安装Java环境 首先需要在服务器上安装Java环境,可以到Java官网下载对应的安装包进行安装。 2. 下载Ap…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部