当前位置: 首页 > article >正文

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

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.HikariDataSource
    druid:
      # 主库配置
      master:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/your_master_db?serverTimezone=UTC
        username: root
        password: root
        max-active: 20
        min-idle: 5
      # 从库配置
      slave:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3307/your_slave_db?serverTimezone=UTC
        username: root
        password: root
        max-active: 20
        min-idle: 5

shardingsphere:
  datasource:
    names: master,slave
    master:
      url: jdbc:mysql://localhost:3306/your_master_db
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    slave:
      url: jdbc:mysql://localhost:3307/your_slave_db
      username: root
      password: root
      driver-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_id
            algorithm-expression: order_${order_id % 2}

  # 配置读写分离
  readwrite-splitting:
    data-source-name: master
    static:
      - name: master
        write: true
      - name: slave
        write: false
        read: 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 实体类:

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderId;

    private String orderName;

    // Getter and Setter methods
}

通过 Spring Data JPA,创建 OrderRepository

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

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

mvn spring-boot:run

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


三、测试与验证

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

测试案例:
@SpringBootTest
public class ShardingSphereTest {

    @Autowired
    private OrderRepository orderRepository;

    @Test
    public void testCreateOrder() {
        Order order = new Order();
        order.setOrderName("Test Order");
        orderRepository.save(order);
    }

    @Test
    public 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.kler.cn/a/508173.html

相关文章:

  • 【Go】Go Gorm 详解
  • python——句柄
  • 面试经验分享-回忆版某小公司
  • PyTorch 神经协同过滤 (NCF) 推荐系统教程
  • LDD3学习8--linux的设备模型(TODO)
  • SQLite 3.48.0 发布,有哪些更新?
  • Elasticsearch(ES)与 MySQL 的对比分析及在 Spring Boot 中的使用
  • 前缀和 (一维 二维)
  • 彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构
  • C++ 的 CTAD 与推断指示(Deduction Guides)
  • 《Opencv》图像金字塔与采样
  • 【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
  • Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧
  • Unsloth 大模型微调工具与 llama.cpp 量化推理库简介及其预训练操作方法
  • 20250118 Flink中的延迟执行机制和数据处理的逻辑拓扑结构(向圖)
  • 基于 Spring Boot、Vue 实现的调问开源问卷系统
  • Linux操作命令之云计算基础命令
  • 安卓端使用线程下载文件卡滞
  • 基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)
  • Biotin sulfo-N-hydroxysuccinimide ester ;生物素磺基-N-羟基琥珀酰亚胺酯;生物素衍生物;190598-55-1
  • [Azure] 如何解决个人账号无法直接登录的问题:利用曲线救国方法访问Speech Studio
  • 利用爬虫获取某学习软件的考试题库(带源码)
  • LLM(大语言模型)支撑下的传统工作流转型发展为AI工作流
  • linux的用户管理和权限设置相关命令
  • 工业视觉5-工业视觉选型
  • C++(二十一)