与 Spring Boot 的无缝集成:ShardingSphere 快速集成实践

news/2025/3/15 21:46:26/

ShardingSphere 是一个轻量级的开源分布式数据库中间件,它支持分库分表、分布式事务、读写分离等功能。它能够与各种应用框架进行集成,其中与 Spring Boot 的集成非常流行,因为它能够帮助开发者在 Spring Boot 项目中快速实现高性能的分布式数据库管理。

本文将介绍如何通过 ShardingSphere 与 Spring Boot 快速集成,实现分库分表、读写分离等功能。


一、ShardingSphere 简介

ShardingSphere 是一个支持分布式数据库中间件功能的开源项目,提供以下几个关键特性:

  • 分库分表:通过数据库的水平切分,进行数据的分布式存储。
  • 读写分离:支持数据库的读写分离,提高数据库性能。
  • 分布式事务:提供两阶段提交协议(2PC)和 XA 事务支持,保证跨数据库的事务一致性。
  • 数据加密与安全:支持数据库数据加密,保障数据安全。
  • 灵活的数据库路由与执行引擎:支持动态路由和SQL解析。

ShardingSphere 与 Spring Boot 的集成能够简化分布式数据库的使用,同时提供灵活的配置和高效的性能。


二、ShardingSphere 与 Spring Boot 集成的步骤

1. 环境准备

首先,我们需要一个 Spring Boot 项目,并确保已安装以下组件:

  • Spring Boot:用于构建后端应用程序。
  • ShardingSphere-JDBC:这是 ShardingSphere 的 JDBC 模块,负责与数据库进行交互。
  • Spring Data JPA / MyBatis:根据需要集成 JPA 或 MyBatis 来访问数据库。
  • 数据库:可以使用 MySQL、PostgreSQL 或其他关系型数据库。
2. 创建 Spring Boot 项目

使用 Spring Initializr 创建一个 Spring Boot 项目,选择所需的依赖项,例如:

  • Spring Web
  • Spring Data JPA 或 MyBatis(根据需求)
  • H2 或 MySQL(数据库)

你可以使用 Spring Initializr 的官网来创建项目。

3. 添加 ShardingSphere 依赖

pom.xml 中添加 ShardingSphere-JDBC 依赖。

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL JDBC Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- ShardingSphere-JDBC dependency --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0</version> <!-- 使用对应的 ShardingSphere 版本 --></dependency>
</dependencies>
4. 配置数据源和 ShardingSphere

ShardingSphere 的配置主要通过 application.ymlapplication.properties 来实现。以下是一个典型的配置示例,配置了 分库分表读写分离 功能。

spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedruid:# 主库配置master:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/your_master_db?serverTimezone=UTCusername: rootpassword: rootmax-active: 20min-idle: 5# 从库配置slave:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3307/your_slave_db?serverTimezone=UTCusername: rootpassword: rootmax-active: 20min-idle: 5shardingsphere:datasource:names: master,slavemaster:url: jdbc:mysql://localhost:3306/your_master_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3307/your_slave_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver# 配置 ShardingSphere 的分库分表策略sharding:tables:order:actual-data-nodes: ds${0..1}.order_${0..1}table-strategy:inline:sharding-column: order_idalgorithm-expression: order_${order_id % 2}# 配置读写分离readwrite-splitting:data-source-name: masterstatic:- name: masterwrite: true- name: slavewrite: falseread: true

在上面的配置中:

  • 数据源配置:配置了主库 master 和从库 slave,实现读写分离。
  • 分库分表配置:为 order 表配置了一个简单的分片策略,按照 order_id 进行分库分表。
  • 读写分离配置:配置了主库为写库,从库为读库。
5. 配置 ShardingSphere 代理

在 Spring Boot 配置中,我们可以设置 ShardingSphere 的 DataSource 和路由规则,通过 ShardingSphere 提供的 Spring Boot Starter 自动集成。ShardingSphere 会自动从配置文件读取相关信息并创建分片数据源。

application.yml 中配置完数据源和 ShardingSphere 后,Spring Boot 会自动注入 ShardingSphere 数据源。

6. 编写实体类和数据库访问层

在 Spring Boot 项目中,可以使用 JPA 或 MyBatis 来访问数据库。在 entity 类中,定义相应的字段和表结构。以下是一个简单的 JPA 实体类:

java">@Entity
public class Order {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long orderId;private String orderName;// Getter and Setter methods
}

通过 Spring Data JPA,创建 OrderRepository

java">public interface OrderRepository extends JpaRepository<Order, Long> {List<Order> findByOrderName(String orderName);
}
7. 启动 Spring Boot 应用

确保 ShardingSphere 的配置正确,然后启动 Spring Boot 应用:

mvn spring-boot:run

在应用启动后,Spring Boot 将自动创建数据源并进行分库分表操作。


三、测试与验证

在集成完成后,可以通过编写测试来验证分库分表和读写分离是否正常工作。例如,创建一些订单并查看其是否被正确路由到不同的数据库。

测试案例:
java">@SpringBootTest
public class ShardingSphereTest {@Autowiredprivate OrderRepository orderRepository;@Testpublic void testCreateOrder() {Order order = new Order();order.setOrderName("Test Order");orderRepository.save(order);}@Testpublic void testReadOrders() {List<Order> orders = orderRepository.findByOrderName("Test Order");orders.forEach(order -> System.out.println(order.getOrderId()));}
}

四、总结

通过 ShardingSphere 与 Spring Boot 的无缝集成,我们可以在 Spring Boot 应用中轻松实现分库分表、读写分离等功能。ShardingSphere 提供了强大的分布式数据库中间件能力,能够帮助开发者在不修改业务代码的情况下,灵活地扩展数据库系统,同时保持高可用性和高性能。以上的集成步骤展示了如何快速启动一个 ShardingSphere 集成的 Spring Boot 项目,你可以根据自己的需求进行自定义配置和优化。


http://www.ppmy.cn/news/1564624.html

相关文章

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建&#xff0c;接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…

鸿蒙动态路由实现方案

背景 随着CSDN 鸿蒙APP 业务功能的增加&#xff0c;以及为了与iOS、Android 端统一页面跳转路由&#xff0c;以及动态下发路由链接&#xff0c;路由重定向等功能。鸿蒙动态路由方案的实现迫在眉睫。 实现方案 鸿蒙版本动态路由的实现原理&#xff0c;类似于 iOS与Android的实…

C++中.h文件中的实现方法

在 C 中&#xff0c;.h 文件和 Java 中的接口有一些相似之处&#xff0c;但它们的作用和用法还是有很大区别。具体来说&#xff0c;.h 文件通常用于声明&#xff0c;但也可以包含一些实现&#xff0c;特别是在某些特殊情况下。 1. C .h 文件的基本用途 C 的头文件&#xff08…

Postman环境变量全局变量设置

在公司中&#xff0c;一般会存在开发环境、测试环境、线上环境等&#xff0c;如果需要在不 同的环境下切换做接口测试&#xff0c;显然我们需要把所有接口的域名进行修改&#xff0c;如果接 口测试用例较多&#xff0c;那么修改会非常费力&#xff0c;postman可直接通过切换环境…

mac 安装mongodb

本文分享2种mac本地安装mongodb的方法&#xff0c;一种是通过homebrew安装&#xff0c;一种是通过tar包安装 homebrew安装 brew tap mongodb/brew brew upate brew install mongodb-community8.0tar包安装 安装mongodb 1.下载mongodb社区版的tar包 mongdb tar包下载地址 2…

VIVADO FIFO (同步和异步) IP 核详细使用配置步骤

VIVADO FIFO (同步和异步) IP 核详细使用配置步骤 目录 前言 一、同步FIFO的使用 1、配置 2、仿真 二、异步FIFO的使用 1、配置 2、仿真 前言 在系统设计中&#xff0c;利用FIFO&#xff08;first in first out&#xff09;进行数据处理是再普遍不过的应用了&#xff0c…

在线宠物用品|基于vue的在线宠物用品交易网站(源码+数据库+文档)

|在线宠物用品交易网站 目录 基于springbootvue的在线宠物用品交易网站 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&am…

【统计的思想】假设检验(一)

假设检验是统计学里的重要方法&#xff0c;同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系&#xff0c;籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统&#xff0c;简称PSS系统&#xff0c;有一种业…