详解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 多线程使用MultipartFile读取excel文件内容报错问题

    解决springboot多线程使用MultipartFile读取excel文件内容报错问题的完整攻略: 原因分析 在springboot多线程中使用MultipartFile读取excel文件内容时,容易出现以下两种错误: java.io.IOException: Stream closed org.apache.poi.POIXMLException: j…

    Java 2023年6月3日
    00
  • Spring Security安全框架之记住我功能

    标题:Spring Security安全框架之记住我功能详解 什么是记住我功能 记住我功能是指,在用户登录成功后,用户的身份认证信息会保持在客户端的cookie中,以便用户下次访问同一站点时不需要再次登录。 Spring Security中如何实现记住我功能 要在Spring Security中实现记住我功能,需要进行以下几个步骤: 1.在spring se…

    Java 2023年6月3日
    00
  • JavaWeb简单文件上传流程的实战记录

    JavaWeb简单文件上传实战攻略 简介 本攻略基于JavaWeb开发,帮助初学者快速入门文件上传功能。我们将介绍一个基于Servlet/JSP的简单文件上传例子,包含完整的代码示例、攻略细节和实践体验。 文件上传流程 JavaWeb文件上传可以分为以下几个步骤: 表单设计 – 创建一个包含 file type input 元素的表单,实现文件上传UI. 解…

    Java 2023年5月19日
    00
  • 超细讲解Java调用python文件的几种方式

    恭喜您,这是一个非常有用的话题。在本篇文章中,我们将会深入探讨Java调用Python文件操作的几种方式。下面是完整攻略的具体内容。 1.首选Java调用Python文件的方式:Jython Jython(Java Python)是一种Python解释器,它使用Java语言编写,可以让Python代码在Java环境下运行。Jython具有明显的优势,可以很好…

    Java 2023年5月19日
    00
  • java.lang.OutOfMemoryError: Metaspace异常解决的方法

    Java.lang.OutOfMemoryError: Metaspace异常解决的方法 当我们在开发Java应用程序时,可能会遇到Metaspace异常。这个异常表示应用程序的metaspace(元空间)达到了其最大值,导致应用程序无法继续进行下去。这种情况下,我们需要采取一些措施来解决这个问题。 什么是Metaspace(元空间) Metaspace是一…

    Java 2023年5月27日
    00
  • 使用SpringSecurity 进行自定义Token校验

    下面是使用Spring Security进行自定义Token校验的完整攻略,步骤如下: 1. 添加依赖 在项目的pom.xml文件中添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s…

    Java 2023年5月20日
    00
  • Java读取properties配置文件的8种方式汇总

    下面就是详细讲解“Java读取properties配置文件的8种方式汇总”的完整攻略。 需求分析 在Java项目中,常常需要读取配置文件进行一些初始化设置或者配置参数,其中properties文件是最常用的一种。但是在实际操作中,不同的场景下可能会有不同的读取方式,因此我们需要对Java读取properties配置文件的8种方式进行归纳总结,以便在实际开发中…

    Java 2023年5月31日
    00
  • Spring Security过滤器链体系的实例详解

    Spring Security过滤器链体系的实例详解 什么是Spring Security过滤器链体系 Spring Security过滤器链体系是Spring Security的核心内容之一,它负责对用户请求进行安全过滤和授权校验。在Spring Security过滤器链体系中,每一个过滤器都有着不同的用途和功能,并且这些过滤器按一定的顺序组成一条链式结构…

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