首页 > 其他分享 >初识:DynamicDatasource动态数据源

初识:DynamicDatasource动态数据源

时间:2024-09-09 16:53:29浏览次数:11  
标签:数据源 数据库 配置 初识 master DynamicDatasource mysql

目录

主要作用

具体例子

其他Maven模块如何利用动态数据源模块

就根据用户服务、订单服务、商品服务、DynamicDataSource服务,DynamicDataSource服务的application.yaml的配置信息,实现实现主从、读写分离、负载均衡、高可用性和故障切换

主要作用

  1. 支持多数据源切换
  • 在微服务架构中,不同的服务或同一服务的不同部分可能需要访问不同的数据库。DynamicDatasource允许开发者根据业务需求动态地切换数据源,无需修改代码或重新部署服务。
  1. 读写分离
  • 通过配置主从数据库,DynamicDatasource可以实现读写分离,即主数据库负责写操作,从数据库负责读操作,从而提高系统的性能和稳定性。
  1. 负载均衡
  • 在多数据库实例的场景下,DynamicDatasource可以自动分配请求到不同的数据库实例,实现负载均衡,防止单一节点过载。
  1. 高可用性和故障切换
  • 当某个数据库实例出现故障时,DynamicDatasource可以快速切换到其他可用的数据库实例,确保服务的连续性和可用性。
  1. 易于集成和配置
  • DynamicDatasource与Spring Boot等主流框架无缝集成,通过简单的配置即可实现数据源的管理和切换,降低了开发和维护成本。

具体例子

假设有一个基于Spring Cloud的微服务架构的电商平台,该平台包含多个服务,如用户服务、订单服务、商品服务等。每个服务都需要访问数据库来存储和检索数据。

  • 场景描述
    • 用户服务需要访问用户数据库来存储和查询用户信息。
    • 订单服务需要访问订单数据库来存储和查询订单信息。
    • 商品服务需要访问商品数据库来存储和查询商品信息。
    • 为了提高性能,每个服务都配置了主从数据库,实现读写分离、负载均衡、高可用性和故障切换
  • DynamicDatasource的应用
    • 在每个服务的Spring Boot配置文件中,配置DynamicDatasource的相关参数,包括数据源列表、默认数据源、读写分离策略等。

DynamicDatasource的配置

在Spring Boot中配置DynamicDatasource,通常需要以下几个步骤:

  1. 添加依赖
    首先,你需要在你的pom.xml中添加DynamicDatasource的依赖。
  2. 配置数据源
    application.ymlapplication.properties配置文件中,你需要定义你的数据源列表、默认数据源、以及每个数据源的详细配置(如URL、用户名、密码等)、配置读写分离策略。

application.yml为例,配置可能如下所示:

spring:  
  datasource:  
    dynamic:  
      primary: master # 设置默认数据源  
      datasource:  
        master:  
          url: jdbc:mysql://localhost:3306/master_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: root  
          password: password  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        slave1:  
          url: jdbc:mysql://localhost:3307/slave_db1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: root  
          password: password  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        # 可以配置更多的从数据源...  
      # 读写分离配置(可选)  
      slave-load-balance-algorithm-type: round_robin # 轮询算法

在这个例子中,我们配置了两个数据源:masterslave1,并指定了master为默认数据源。我们还配置了读写分离的负载均衡算法为轮询(round_robin)。

  1. 配置DataSourceProvider
    某些DynamicDatasource实现可能需要你实现或配置DataSourceProvider来提供数据源。这通常是通过Java配置类来实现的,但具体取决于你所使用的DynamicDatasource库的版本和特性。
  2. 使用@DS注解(可选):
    为了实现更细粒度的数据源切换,你可以在你的Mapper接口或Service层的方法上使用@DS注解来指定使用哪个数据源。例如,@DS("slave1")会指示该方法使用slave1数据源。然而,这并非所有DynamicDatasource实现都支持的特性,具体取决于你所使用的库。
    • 在服务启动时,DynamicDatasource会根据配置自动加载和初始化数据源。
    • 在服务执行数据库操作时,DynamicDatasource会根据请求的类型(读或写)和配置的读写分离策略,自动选择相应的数据源进行操作。
    • 如果某个数据库实例出现故障,DynamicDatasource会检测到该故障并自动切换到其他可用的数据库实例,确保服务的连续性和可用性。

在Cloud项目中,当使用Maven进行多模块管理时,动态数据源(Dynamic Datasource)模块通常负责管理和配置数据库连接信息,但它并不直接存放所有Maven项目的数据信息,而是管理数据库连接的元数据和配置,以便其他模块能够根据需要连接到相应的数据库。

其他Maven模块如何利用动态数据源模块

  1. 依赖关系:在Maven项目中,其他模块通过依赖关系来利用动态数据源模块。这通常在子模块的pom.xml文件中通过<dependency>标签声明对动态数据源模块的依赖来实现。
  2. 配置集成:其他模块在启动时会自动加载并集成动态数据源模块的配置。这意味着它们可以无缝地使用动态数据源模块提供的数据库连接服务,而无需关心具体的连接细节。
  3. 数据源注入:在Spring框架中,动态数据源模块通常会将配置好的数据源注入到Spring的DataSource Bean中。其他模块通过Spring的依赖注入机制来获取并使用这些DataSource Bean,从而实现对数据库的访问。

就根据用户服务、订单服务、商品服务、DynamicDataSource服务,DynamicDataSource服务的application.yaml的配置信息,实现实现主从、读写分离、负载均衡、高可用性和故障切换
spring:  
  datasource:  
    dynamic:  
      primary: master # 设置默认数据源组为master,这里假设所有服务的主库都配置在master组  
      strict: false  
      datasource:  
        # 用户服务数据源  
        user-master:  
          url: jdbc:mysql://user-master-host:3306/userdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: user_master  
          password: user_master_pass  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        user-slave:  
          url: jdbc:mysql://user-slave-host:3306/userdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: user_slave  
          password: user_slave_pass  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        # 订单服务数据源  
        order-master:  
          url: jdbc:mysql://order-master-host:3306/orderdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: order_master  
          password: order_master_pass  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        order-slave:  
          url: jdbc:mysql://order-slave-host:3306/orderdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: order_slave  
          password: order_slave_pass  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        # 商品服务数据源  
        product-master:  
          url: jdbc:mysql://product-master-host:3306/productdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: product_master  
          password: product_master_pass  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        product-slave:  
          url: jdbc:mysql://product-slave-host:3306/productdb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC  
          username: product_slave  
          password: product_slave_pass  
          driver-class-name: com.mysql.cj.jdbc.Driver  
  
      # 读写分离配置(这里需要动态数据源框架支持)  
      # 注意:以下配置可能需要根据你使用的动态数据源框架进行调整  
      seata:  
        enabled: true # 假设使用Seata进行分布式事务管理  
        application-id: ${spring.application.name}  
        tx-service-group: my_tx_group  
  
      # 负载均衡和故障切换通常不是在这里配置的,而是依赖于数据库中间件或集群  
      # 但你可以在这里配置一些基本的路由规则或数据源选择策略(如果框架支持)  
  
# 其他配置...

标签:数据源,数据库,配置,初识,master,DynamicDatasource,mysql
From: https://blog.csdn.net/m0_57623482/article/details/142014208

相关文章

  • javaSE初识
    前端:微信客户端  网页三剑客【 HTML(素颜)、CSS(化妆)、JS(行为)】 后端:服务器  帮你处理数据  JavaC++测试   测开:开发一些测试工具运维:保证你的产品时时刻刻安全运行Java的祖师爷--詹姆斯*高斯林Java的特点:一次编译,到处运行跨平台的HelloWorld新建文本......
  • C语言程序设计(初识C语言后部分)
    不要重来,不要白来,不要重来。5.指针和数组数组:一组相同类型元素的集合指针变量:是一个变量,存放的地址要理解数组名大部分情况下是数组的首元素地址6.二级指针先了解一级指针变量二级指针变量(二级指针变量是用来存放一级指针变量的地址的)7.指针数组指针数组是......
  • 初识IO模型,简单了解几种常见的IO模型
    什么是IO?简单来讲,就是输入和输出从计算机结构分析:从计算机结构来看,输入输出是一个重要的子系统,负责管理计算机与外部设备之间的数据交换。不仅仅是硬盘和内存之间的传输,还包括各种输入输出设备(如键盘、鼠标、显示器、硬盘、网络设备)与内存、处理器之间的数据交互。程序控制......
  • 初识jQuery
    jQuery简介jQuery由美国人JohnResig于2006年创建jQuery是目前最流行的JavaScript程序库,它是对JavaScript对象和函数的封装它的设计思想是writeless,domore例:实现隔行变色效果,只需一句关键代码<!DOCTYPEhtml><html><head><title>订单表格</title></head><!--......
  • 数据治理过程在选择数据源时,需要考虑哪些因素
    在选择数据源时,需要考虑以下多个关键因素,以确保数据的质量、安全性、可靠性和实用性:1.数据质量和准确性可靠性和准确性:数据必须经过严谨采集和处理,确保其真实可靠。这可以通过查看数据源提供商的信誉、参考其他用户的评价和反馈,以及了解数据的收集和处理过程来实现。数据完......
  • 滚雪球学MyBatis-Plus(11):多数据源配置
    前言在上期内容中,我们详细介绍了如何使用MyBatisPlus的代码生成器。通过代码生成器,我们能够根据数据库表结构自动生成实体类、Mapper接口、服务类、控制器和XML映射文件,大大提高了开发效率,并减少了重复劳动。同时,我们还探讨了如何进行代码生成器的自定义配置,使其生成......
  • spring配置数据源
    1、配置druid连接池pom引入<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.11</version></dependency>spring-context配置......
  • C语言程序设计(初识C语言后部分)
    十九,指针1)指针是什么?指针理解的2个要点:1,指针是内存中一个最小单元的编号,也就是地址2,平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量总结:指针就是地址,口语中说的指针通常指的是指针变量。指针变量:我们可以通过&(取地址操作符)取出变量的内存起始地址,把......
  • 从初识Redis到精通Redis,一份Java程序员必备Redis实战文档分享
    本文深入浅出的介绍了Redis的五种数据类型,并通过多个实用示例展示了Redis的用法。除此之外还讲述了Redis的优化方法和扩展方法。一共由三个部分组成,第一部分对Redis进行了介绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作5种数据结构的命令,并详解了如何使用R......
  • 了解MyBatis-Plus&Druid数据源
    MyBatis-Plus简介MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上进行了增强而不改变其原有的功能,旨在简化开发、提高效率。以下是对MyBatis-Plus的详细简介:一、基本概述定义:MyBatis-Plus是在MyBatis基础上进行增强的一个框架,通过提供一系列的特性和工具,极大......