springboot集成sharding-jdbc_springboot整合sharding-jdbc-程序员宅基地

技术标签: spring boot  sharding-jdbc  java  分库  

一个比较简单的集成,只用到了分库,没有分表。
pom完整依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- lombok 插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- hu tool -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.10</version>
        </dependency>
        <!-- mybatis plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.69</version>
        </dependency>
        <!-- sharding jdbc -->
        <dependency>
            <groupId>io.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

数据库建表,我这里有两个数据库db1、db2,每个库都建了一张t_user表,建表语句如下:

CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `account` varchar(32) DEFAULT NULL,
  `pwd` varchar(64) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

application.yml配置:

spring:
  main:
    allow-bean-definition-overriding: true
  application:
    name: shardingjdbc
#配置mp
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:mapper/*Mapper.xml
  global-config:
    db-config:
      id-type: none
#分库分表配置
sharding:
  jdbc:
    datasource:
      #指定数据源 这里有两个数据库 所以指定两个数据源
      names: db0,db1
      #每个数据源指定不通的数据库就可以了
      db0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: root
        jdbc-url: jdbc:mysql://***.***.***.***:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false
      db1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: root
        jdbc-url: jdbc:mysql://***.***.***.***:3306/db2?useUnicode=true&characterEncoding=utf-8&useSSL=false
    config:
      sharding:
        tables:
          t_user:
            #这个配置似乎没有生效 因为这个id是我用时间戳生成的
            key-generator:
              column: id
              type: SNOWFLAKE
            #哪个库下面的t_user表
            actual-data-nodes: db$->{0..1}.t_user
            #策略就是根据id对2取余 
            database-strategy:
              inline: #行表达式
                sharding-column: id        #列名称,多个列以逗号分隔
                algorithm-expression: db${id % 2}
        binding-tables: t_user

这个主要是配置可能会稍微多一些,其他都和平时开发是一样的,建立实体类、mapper、service、controller,然后调用接口去添加数据,shardingjdbc会根据id进行分库插入,效果如下:
在这里插入图片描述
在这里插入图片描述
数据id为偶数的分配到了db1库中的用户表,数据id为奇数的分配到了db2中的用户表。查询的时候则会将两张表的数据都查询出来。效果如下:

{
    
    "records": [
        {
    
            "id": 1640764482208,
            "name": "张三5",
            "account": "a5",
            "pwd": "p5",
            "createTime": "2021-12-29 15:54:42"
        },
        {
    
            "id": 1640763954228,
            "name": "张三4",
            "account": "a4",
            "pwd": "p4",
            "createTime": "2021-12-29 15:45:54"
        },
        {
    
            "id": 1640763948224,
            "name": "张三3",
            "account": "a3",
            "pwd": "p3",
            "createTime": "2021-12-29 15:45:48"
        },
        {
    
            "id": 1640763941891,
            "name": "张三",
            "account": "a2",
            "pwd": "p2",
            "createTime": "2021-12-29 15:45:42"
        },
        {
    
            "id": 1640763937284,
            "name": "张三",
            "account": "a1",
            "pwd": "p1",
            "createTime": "2021-12-29 15:45:37"
        }
    ],
    "total": 5,
    "size": 10,
    "current": 1,
    "orders": [],
    "optimizeCountSql": true,
    "searchCount": true,
    "countId": null,
    "maxLimit": null,
    "pages": 1
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43470118/article/details/122217794

智能推荐

#####Docker私有仓库的搭建和加认证####_registry-cli-程序员宅基地

文章浏览阅读328次。1.下载registry镜像[root@server1 docker]# docker pull registry:2: Pulling from library/registryc87736221ed0: Pull complete 1cc8e0bb44df: Pull complete 54d33bcb37f5: Pull complete e8afc091c171: Pull c..._registry-cli

java nio系列教程(2)---channel(通道介绍)和使用_messageutil.bytebuffertoarray-程序员宅基地

文章浏览阅读2.3k次。大家推荐个靠谱的公众号程序员探索之路,公众号内点击网赚获取彩蛋,大家一起加油 ​package com.zzh.buffer;import com.google.common.collect.Lists;import org.junit.jupiter.api.Test;import java.io.FileInputStream;import java.io.FileOut..._messageutil.bytebuffertoarray

官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行!_cannot resolve org.apache.flink:flink-web-socket:1-程序员宅基地

文章浏览阅读5.7k次,点赞9次,收藏10次。‍‍翻译 | 付典Review |徐榜江、朱翥Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 ..._cannot resolve org.apache.flink:flink-web-socket:1.12.0

计算机硬件技术的应用毕业论文,计算机硬件技术论文-程序员宅基地

文章浏览阅读528次。为毕业生写计算机硬件技术论文提供计算机硬件技术论文范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文,包括论文选题、开题报告、文献综述、任务书、参考文献等,是优秀免费计算机硬件技术论文网站。计算机硬件组装及维护技术的探讨摘要:随着社会进步与科技的快速发展,计算机的应用已经成为我们生活工作中的一个重要组成部分。因此,我们需要掌握一些基本的计算机硬件组装。计算机硬件维护保养技术探讨摘要】随着计算机..._计算机硬件技术理解与应用论文

扫描线算法-程序员宅基地

文章浏览阅读2w次,点赞32次,收藏94次。背景之前看到洛谷管理员大佬发明了个二次分块,然后就想学学,发现扫描线是个前置知识,于是来肝这个算法了,发现其实不难。进入正题扫描线一个很经典的例题:在坐标轴上有若干个矩形,问他们覆盖的面积总和。因为他们覆盖的面积有重复,于是就用到了神奇的扫描线算法。假设有两个矩形,如图:先来看一道例题:题目大意,..._扫描线算法

OpenCV实现单目摄像头对图像目标测距_opencv三角测量法测距-程序员宅基地

文章浏览阅读3.8k次,点赞6次,收藏55次。使用opencv对单目摄像头中的目标实现测量距离1.方法介绍:根据相似三角形的方法:F = P×D / W , 其中W为物体的实际宽度,D为物体平面与相机平面的距离,照片上物体的像素宽度为P,相机焦距为FD = F×W / P ,这样知道相机的内参焦距就可以求得物体平面与相机平面的距离D2.代码:import cv2import imutilsimport numpy as npfrom imutils import paths# 获取目标的轮廓信息def find_marker_opencv三角测量法测距

随便推点

鸿蒙系统与应用场景,华为鸿蒙操作系统正式发布-程序员宅基地

文章浏览阅读627次。原标题:华为鸿蒙操作系统正式发布深圳湾现场报道,2019 年 8 月 9 日,华为全球开发者大会在东莞正式举行,会上,华为正式发布操作系统,这是一个基于微内核、面向全场景的分布式操作系统。随着华为全场景智慧生活战略的不断完善,鸿蒙 OS 将作为华为迎接全场景体验时代到来的产物,发挥其轻量化、小巧、功能强大的优势,率先应用在智能手表、智慧屏、车载设备、智能音箱等智能终端上,着力构建一个跨终端的融合共..._鸿蒙操作系统发布

HTNL5--<video>/<audio>随笔-程序员宅基地

文章浏览阅读174次。WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。在 2006 年,双方决定进行合作,来创建一个新版本的 HTML——HTML5。为 HTML5 建立的一些规则:新特性应该基于 HTML、CSS、DOM 以及 JavaScript。减少对外部插件的需求(比如 Flash)更优秀的错误处理更多取代脚本的标记HTML5 应该独..._var myvideo = document.getelementbyid("video");

磁力连接是如何接入DHT网络并下载文件的_dht下载-程序员宅基地

文章浏览阅读6.8k次。你的bt客户端连接到的第一个ip(除DNS外)提供一个公网ip的列表,这些ip被用来当作DHT网络的入口。这个列表一般由制作bt客户端的人来提供。当你接入DHT网络之后,你会通过DHT查询找到更多的ip,这些ip一般会缓存再你的磁盘上以便于下次你不用再下载一次ip列表。磁力链接包含了一个hash值,就是一个唯一的id,用来识别你要查找的文件,它不包含任何ip,也不需要这么做。这个hash就是从..._dht下载

默认路由及静态路由配置_默认路由配置命令-程序员宅基地

文章浏览阅读1.2w次,点赞9次,收藏85次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档静态路由和默认路由的基础配置前言一、什么是路由、路由器、静态路由?二、基本配置这样就可以通过配置默认路由和静态路由实现互通啦![在这里插入图片描述](https://img-blog.csdnimg.cn/37a571981fa2499abdcb9c486d96a585.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3R1ZHlf._默认路由配置命令

黑马程序员 一、java 概述与基础知识_黑马java干嘛的-程序员宅基地

文章浏览阅读514次。一、黑马程序员—java 概述与基础知识1、何为编程?编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。 2、Ja_黑马java干嘛的

python 手机测试_python脚本如何测试手机-程序员宅基地

文章浏览阅读484次。一、adb 相关命令:1、关闭adb服务:adb kill-server2、启动adb服务 adb start-server3、查询当前运行的所有设备 adb devices4、可能在adb中存在多个虚拟设备运行 可以指定虚拟设备运行 -s 虚拟设备名称5、重启设备 adb reboot --指定虚拟设备 adb -s 设备名称 reboot6、查看日志 adb logcat 清除..._手机mtbf测试python代码