最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成ShardingSphere-JDBC的基本使用指南

 更新時(shí)間:2025年07月23日 08:21:01   作者:冰糖心書(shū)房  
在 Spring Boot 中集成 ShardingSphere-JDBC,可以透明地將數(shù)據(jù)分片、讀寫(xiě)分離等功能引入到應(yīng)用中,下面小編就來(lái)和大家簡(jiǎn)單講講ShardingSphere 的基本步驟和核心概念吧

在 Spring Boot 中集成 ShardingSphere-JDBC,可以透明地將數(shù)據(jù)分片、讀寫(xiě)分離等功能引入到應(yīng)用中,而無(wú)需大規(guī)模修改業(yè)務(wù)代碼。以下是在 Spring Boot 中使用 ShardingSphere 的基本步驟和核心概念。

核心概念

在開(kāi)始之前,了解幾個(gè) ShardingSphere 的基本術(shù)語(yǔ)至關(guān)重要:

  • 邏輯表 (Logical Table):應(yīng)用程序代碼中操作的表的名稱,例如 t_order
  • 真實(shí)表 (Actual Table):物理數(shù)據(jù)庫(kù)中真實(shí)存在的表,例如分布在不同數(shù)據(jù)庫(kù)中的 t_order_0, t_order_1。
  • 分片鍵 (Sharding Key):用于決定數(shù)據(jù)屬于哪個(gè)分片的表列,常見(jiàn)的如 user_id, order_id。
  • 分片算法 (Sharding Algorithm):用于路由數(shù)據(jù)的邏輯,例如基于取模運(yùn)算 sharding_key_value % number_of_shards。

ShardingSphere-JDBC 的魅力在于它會(huì)攔截應(yīng)用程序的 SQL 請(qǐng)求,并根據(jù)配置的規(guī)則將其路由到正確的真實(shí)數(shù)據(jù)源和真實(shí)表中執(zhí)行。

基本使用步驟

1. 添加 Maven 依賴

首先,在 Spring Boot 項(xiàng)目的 pom.xml 文件中添加 ShardingSphere 的官方 Spring Boot Starter 依賴。

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
    <version>5.5.0</version> <!-- 建議使用最新穩(wěn)定版 -->
</dependency>
<!-- 還需要添加數(shù)據(jù)庫(kù)驅(qū)動(dòng)和JPA/MyBatis等依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

2. 配置文件 (application.yml)

接下來(lái),在 application.yml (或 application.properties) 文件中進(jìn)行配置。這是集成工作的核心部分,主要包括數(shù)據(jù)源配置和分片規(guī)則配置。

以下是一個(gè)將 t_order 表水平分片到兩個(gè)數(shù)據(jù)庫(kù) (ds0, ds1),每個(gè)數(shù)據(jù)庫(kù)中又分為兩張表 (t_order_0, t_order_1) 的示例。

spring:
  shardingsphere:
    # 開(kāi)啟 SQL 日志,便于調(diào)試
    props:
      sql-show: true
    # 1. 定義真實(shí)數(shù)據(jù)源
    datasource:
      names: ds0, ds1
      # 第一個(gè)數(shù)據(jù)源
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/ds0?useSSL=false
        username: root
        password: your_password
      # 第二個(gè)數(shù)據(jù)源
      ds1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3307/ds1?useSSL=false # 注意端口或地址不同
        username: root
        password: your_password

    # 2. 定義規(guī)則
    rules:
      # 分片規(guī)則
      sharding:
        tables:
          # 配置 t_order 表的規(guī)則
          t_order:
            # 數(shù)據(jù)節(jié)點(diǎn):邏輯表 t_order 映射到 ds0 和 ds1 的 t_order_0 和 t_order_1 表
            actual-data-nodes: ds$->{0..1}.t_order_$->{0..1}
            # 分庫(kù)策略
            database-strategy:
              standard:
                sharding-column: user_id # 分庫(kù)鍵
                sharding-algorithm-name: database_inline # 分庫(kù)算法名稱
            # 分表策略
            table-strategy:
              standard:
                sharding-column: order_id # 分表鍵
                sharding-algorithm-name: table_inline # 分表算法名稱
        # 3. 定義分片算法
        sharding-algorithms:
          # 數(shù)據(jù)庫(kù)分片算法:基于 user_id 取模
          database_inline:
            type: INLINE
            props:
              algorithm-expression: ds$->{user_id % 2}
          # 表分片算法:基于 order_id 取模
          table_inline:
            type: INLINE
            props:
              algorithm-expression: t_order_$->{order_id % 2}

配置解釋:

  • spring.shardingsphere.datasource.names: 聲明所有真實(shí)數(shù)據(jù)源的名稱。
  • spring.shardingsphere.rules.sharding.tables: 配置需要分片的表。
  • actual-data-nodes: 這是核心映射關(guān)系。ds$->{0..1}.t_order_$->{0..1} 是一種 Groovy 表達(dá)式,表示 t_order 表分布在 ds0.t_order_0, ds0.t_order_1, ds1.t_order_0, ds1.t_order_1 這四張真實(shí)表中。
  • database-strategytable-strategy: 分別定義分庫(kù)和分表的策略。這里使用的是標(biāo)準(zhǔn)策略 (standard)。
  • sharding-column: 指定用于計(jì)算分片的列。
  • sharding-algorithms: 定義具體的分片算法。INLINE 是一種行內(nèi)表達(dá)式算法,適用于簡(jiǎn)單的分片邏輯。

3. 創(chuàng)建實(shí)體類和 Repository

ShardingSphere 對(duì)業(yè)務(wù)代碼是無(wú)侵入的,因此你可以像往常一樣使用 JPA、MyBatis 等 ORM 框架。

實(shí)體類 (Entity):

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "t_order") // 使用邏輯表名
public class Order {
    @Id
    private Long orderId;
    private Long userId;
    private String description;

    // Getters and Setters
}

數(shù)據(jù)訪問(wèn)接口 (Repository):

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
}

4. 在業(yè)務(wù)邏輯中使用

在你的服務(wù)層中,直接注入 OrderRepository 并使用即可。ShardingSphere 會(huì)在底層自動(dòng)處理數(shù)據(jù)的路由。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;

    public void createOrders() {
        for (int i = 0; i < 10; i++) {
            Order order = new Order();
            order.setOrderId((long) i);
            order.setUserId((long) (i % 4)); // 模擬不同的用戶
            order.setDescription("Order for user " + order.getUserId());
            orderRepository.save(order);
        }
    }
}

當(dāng) orderRepository.save(order) 被調(diào)用時(shí):

  • ShardingSphere-JDBC 攔截該 SQL 操作。
  • 它會(huì)解析出 user_idorder_id 的值。
  • 根據(jù) application.yml 中配置的 database_inline 算法 (ds${user_id % 2}),決定數(shù)據(jù)應(yīng)存入 ds0 還是 ds1。
  • 根據(jù) table_inline 算法 (t_order_${order_id % 2}),決定數(shù)據(jù)應(yīng)存入 t_order_0 還是 t_order_1。
  • 最終,SQL 被路由到正確的物理表中執(zhí)行。

通過(guò)以上步驟,我們就可以在 Spring Boot 項(xiàng)目中成功集成并基礎(chǔ)地使用 ShardingSphere-JDBC 實(shí)現(xiàn)數(shù)據(jù)分片。ShardingSphere 還支持讀寫(xiě)分離、數(shù)據(jù)加密和分布式事務(wù)等更高級(jí)的功能,這些也可以通過(guò)類似的配置文件進(jìn)行啟用和設(shè)置。

到此這篇關(guān)于SpringBoot集成ShardingSphere-JDBC的基本使用指南的文章就介紹到這了,更多相關(guān)SpringBoot集成ShardingSphere-JDBC內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于springboot集成hbase過(guò)程解析

    基于springboot集成hbase過(guò)程解析

    這篇文章主要介紹了基于springboot集成hbase過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot項(xiàng)目使用mybatis-plus逆向自動(dòng)生成全套代碼

    SpringBoot項(xiàng)目使用mybatis-plus逆向自動(dòng)生成全套代碼

    在JavaWeb工程中,每一個(gè)SSM新項(xiàng)目或者說(shuō)是SpringBoot項(xiàng)目也好,都少不了model、controller、service、dao等層次的構(gòu)建。使用mybatis-plus逆向可以自動(dòng)生成,感興趣的可以了解一下
    2021-09-09
  • Kotlin 基礎(chǔ)教程之類、對(duì)象、接口

    Kotlin 基礎(chǔ)教程之類、對(duì)象、接口

    這篇文章主要介紹了Kotlin 基礎(chǔ)教程之類、對(duì)象、接口的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • JAVA 集合框架Map 接口的深度解析與實(shí)戰(zhàn)指南

    JAVA 集合框架Map 接口的深度解析與實(shí)戰(zhàn)指南

    文章主要介紹了Map接口及其常用實(shí)現(xiàn)類(HashMap、LinkedHashMap、TreeMap)的核心特性、底層原理和適用場(chǎng)景,詳細(xì)講解了HashMap的哈希表結(jié)構(gòu)、鏈表和紅黑樹(shù)處理、線程不安全性及自定義Key注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • Spring Boot Actuator監(jiān)控器配置及使用解析

    Spring Boot Actuator監(jiān)控器配置及使用解析

    這篇文章主要介紹了Spring Boot Actuator監(jiān)控器配置及使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java Spring boot 2.0 跨域問(wèn)題的解決

    Java Spring boot 2.0 跨域問(wèn)題的解決

    本篇文章主要介紹了Java Spring boot 2.0 跨域問(wèn)題的解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 深入理解Java中關(guān)鍵字final、finally、finalize的區(qū)別

    深入理解Java中關(guān)鍵字final、finally、finalize的區(qū)別

    final、finally、finalize?的區(qū)別?這三個(gè)?Java?關(guān)鍵字雖然拼寫(xiě)相似,但功能完全不同,本文將從定義、使用場(chǎng)景、代碼示例、底層機(jī)制以及最佳實(shí)踐等多個(gè)維度,徹底講清這三者的差異,并附上流程圖和對(duì)比表格,助你一次搞懂
    2026-05-05
  • 使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決

    使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決

    本文主要介紹了使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • MyBatisPlus+Spring實(shí)現(xiàn)聲明式事務(wù)的方法實(shí)現(xiàn)

    MyBatisPlus+Spring實(shí)現(xiàn)聲明式事務(wù)的方法實(shí)現(xiàn)

    本文主要介紹了MyBatisPlus+Spring實(shí)現(xiàn)聲明式事務(wù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Gson序列化指定忽略字段的三種寫(xiě)法詳解

    Gson序列化指定忽略字段的三種寫(xiě)法詳解

    在我們?nèi)粘J褂胘son序列化框架過(guò)程中,經(jīng)常會(huì)遇到在輸出json字符串時(shí),忽略某些字段,那么在Gson框架中,要想實(shí)現(xiàn)這種方式,可以怎么處理呢,本文就來(lái)介紹一下
    2021-10-10

最新評(píng)論

西青区| 三河市| 高陵县| 涪陵区| 巨鹿县| 嘉黎县| 海门市| 吉木乃县| 滁州市| 辽宁省| 基隆市| 嘉黎县| 宣恩县| 南宫市| 南溪县| 陵水| 茶陵县| 延庆县| 韶关市| 吉隆县| 乌兰县| 蒙自县| 汉阴县| 黄龙县| 仁怀市| 年辖:市辖区| 乐至县| 上林县| 怀集县| 忻城县| 武平县| 平阴县| 冀州市| 合川市| 广灵县| 广安市| 永康市| 棋牌| 清苑县| 成武县| 深水埗区|