Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表

交易所流水表的单表数据量已经过亿,选用Sharding-JDBC进行分库分表。MyBatis-Plus和MyBatis的整合方式完全一样,因此需要整合MyBatis的也可参考。采用Sharding-JDBC

作为分表插件的原因是配置方便,只需要添加Maven依赖导入Jar包而不需要中间件,且对业务代码无侵入。目前在实际业务中用的是单库多表,将交易流水表分成了100张。

配置经过生产环境的检验,亲测可用。

分库分表相关的pom文件如下:

  1. <!-- 提供mysql驱动 -->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <scope>runtime</scope>
  6. </dependency>
  7. <!--mybatis-plus自动的维护了mybatis以及mybatis-spring的依赖,
  8. 在springboot中这三者不能同时的出现,避免版本的冲突-->
  9. <!--MyBatis-Plus相关依赖-->
  10. <dependency>
  11. <groupId>com.baomidou</groupId>
  12. <artifactId>mybatis-plus-boot-starter</artifactId>
  13. <version>3.0.1</version>
  14. </dependency>
  15. <!--如果整合MyBatis而不是MyBatis-Plus,用这个依赖-->
  16. <!--<dependency>-->
  17. <!--<groupId>org.mybatis.spring.boot</groupId>-->
  18. <!--<artifactId>mybatis-spring-boot-starter</artifactId>-->
  19. <!--<version>2.0.1</version>-->
  20. <!--</dependency>-->
  21. <dependency>
  22. <groupId>org.apache.shardingsphere</groupId>
  23. <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
  24. <version>4.0.0-RC2</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.apache.shardingsphere</groupId>
  28. <artifactId>sharding-jdbc-spring-namespace</artifactId>
  29. <version>4.0.0-RC2</version>
  30. </dependency>

SpringBoot配置文件如下:

  1. spring:
  2. shardingsphere:
  3. datasource:
  4. # 数据库名称,可自定义,可以为多个
  5. # names: ds0,ds1
  6. names: ds0
  7. ds0:
  8. # 采用的数据库连接池
  9. type: com.zaxxer.hikari.HikariDataSource
  10. # JDBC连接Mysql6 com.mysql.cj.jdbc.Driver时,需要指定时区serverTimezone,若采用com.mysql.jdbc.Driver则无需指定
  11. driver-class-name: com.mysql.cj.jdbc.Driver
  12. # url是数据库的 JDBC URL,而jdbc-url是用来创建连接的 JDBC URL。Hikari没有url属性,所以这里用jdbc-url
  13. jdbc-url: jdbc:mysql://10.10.10.101:3306/transaction?&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Hongkong
  14. username: 昼屿
  15. password: 昼屿
  16. sharding:
  17. tables:
  18. # 需要进行分表的逻辑表名,用MyBatis或者MyBatis-Plus操作数据库时只需要操作逻辑表即可,xml文件也只需要配置逻辑表
  19. tranasction:
  20. # 实际的表结点,分了100个表,表名为tranasction0-tranasction99,
  21. actual-data-nodes: ds0.tranasction$->{0..99}
  22. # 分表策略
  23. table-strategy:
  24. # 主键生成策略,这里采用的是Sharding默认的雪花算法作为分布式唯一id算法
  25. key-generator:
  26. column: id
  27. type: SNOWFLAKE
  28. # 分表策略,我在交易流水表这选择的策略是根据用户id分表,可以结合具体业务,根据时间分表或者根据其他参数分表
  29. inline:
  30. sharding-column: uid
  31. algorithm-expression: tranasction$->{uid % 100}
  32. props:
  33. # 是否打印逻辑SQL语句和实际SQL语句,建议调试时打印,在生产环境关闭
  34. sql:
  35. show: true
  36. #MyBatis-Plus的相关配置,如果采用MyBatis可以忽略此部分
  37. mybatis-plus:
  38. # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/com.exchange.mapper/*Mapper.com.exchange.mapper
  39. # 如果是放在resource目录 classpath:/com.exchange.mapper/*Mapper.com.exchange.mapper
  40. mapper-locations: classpath:/mapper/*.xml
  41. #实体扫描,多个package用逗号或者分号分隔
  42. typeAliasesPackage: com.exchange.yourpackage.entity
  43. global-config:
  44. #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
  45. #若采用雪花算法生成id,需要在生成的实体类中将id的type = IdType.AUTO去掉
  46. id-type: 0
  47. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
  48. field-strategy: 2
  49. #驼峰下划线转换
  50. db-column-underline: true
  51. #刷新mapper 调试神器
  52. #refresh-mapper: true
  53. #数据库大写下划线转换
  54. #capital-mode: true
  55. # Sequence序列接口实现类配置
  56. #逻辑删除配置(下面3个配置)
  57. logic-delete-value: Y
  58. logic-not-delete-value: N
  59. #sql-injector: com.nky.pork.quality.standard.conf.MybatisPlusConfig
  60. configuration:
  61. #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
  62. map-underscore-to-camel-case: true
  63. cache-enabled: false
  64. #配置JdbcTypeForNull, oracle数据库必须配置
  65. jdbc-type-for-null: 'null'
  66. #是否输出Mybatis-Plus代执行的SQL语句
  67. logging:
  68. level:
  69. com.exchange.yourpackage.dao: trace
  70. server:
  71. port: 6666
  72. servlet:
  73. context-path: /zhouYu

Sharding JDBC对业务代码时无侵入的,只需要用未分库分表前对实体表的操作方法,来操作分库分表后的逻辑表即可。也可完美兼容PageInfo插件进行分页。

Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表的更多相关文章

  1. 分库分表(5) ---SpringBoot + ShardingSphere 实现分库分表

    分库分表(5)--- ShardingSphere实现分库分表 有关分库分表前面写了四篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3. ...

  2. 分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离

    分库分表(6)--- ShardingSphere实现分表+ 读写分离 有关分库分表前面写了五篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论 ...

  3. 分库分表(7)--- SpringBoot+ShardingSphere实现分库分表 + 读写分离

    分库分表(7)--- ShardingSphere实现分库分表+读写分离 有关分库分表前面写了六篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理 ...

  4. 数据库分库分表(sharding)系列【转】

    原文地址:http://www.uml.org.cn/sjjm/201211212.asp数据库分库分表(sharding)系列 目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三 ...

  5. 数据库分库分表(sharding)系列

    数据库分库分表(sharding)系列     目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三) 关于使用框架还是自主开发以及sharding实现层面的考量 (四) 多数据源的 ...

  6. 三、SpringBoot 整合mybatis 多数据源以及分库分表

    前言 说实话,这章本来不打算讲的,因为配置多数据源的网上有很多类似的教程.但是最近因为项目要用到分库分表,所以让我研究一下看怎么实现.我想着上一篇博客讲了多环境的配置,不同的环境调用不同的数据库,那接 ...

  7. Sharding-JDBC基本使用,整合Springboot实现分库分表,读写分离

    结合上一篇docker部署的mysql主从, 本篇主要讲解SpringBoot项目结合Sharding-JDBC如何实现分库分表.读写分离. 一.Sharding-JDBC介绍 1.这里引用官网上的介 ...

  8. 【ShardingSphere技术专题】「ShardingJDBC」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

    前提介绍 ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Shardin ...

  9. SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表

    一.水平分割 1.水平分库 1).概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中. 2).结果 每个库的结构都一样:数据都不一样: 所有库的并集是全量数据: 2.水平分表 1).概 ...

随机推荐

  1. 成员指针与mem_fn

    本文是<functional>系列的第4篇. 成员指针是一个非常具有C++特色的功能.更低级的语言(如C)没有类,也就没有成员的概念:更高级的语言(如Java)没有指针,即使有也不会有成员 ...

  2. [转+自]disable_functions之巧用LD_PRELOAD突破

    写在前面: 通过知乎的一篇艰难的渗透提权,引发了一些对于disable_funcionts绕过的思考,虽然在暑假日记中记载了四种绕过disable_functions,比如com组件,pcntl_ex ...

  3. MVC-第一个简单的程序

    来源于:https://www.cnblogs.com/miro/p/4030622.html 从空白开始,建立一个基本框架详细步骤 1,新建项目 NOTE:模板要选Empty,如果直接选MVC会产生 ...

  4. Java IO 流 -- 转换流: InputStreamReader OutputStreamWriter

    java 中 转换流是以字符流的形式操作字节流,需要注意一下两点: 1.操作内容必须是纯文本 2.指定字符集避免乱码 操作控制台输入输出: try (BufferedReader br = new B ...

  5. 关于MySQL数据库存储过程的感想

    以下只是学习路上的浅薄感想,如理解有所偏差,还请有识之士指正! 一.存储过程意义理解 关于存储过程,我的理解是对数据库语言进行编程调用,就像Java代码类编程写一个具有某种特定功能的方法去进行调用一样 ...

  6. c++<cstdlib>文件中的函数产生随机数

    C++中没有自带的random函数,要生成随机数就需要用c文件"stdlib.h"里的函数rand()和srand(),不过,由于rand()的内部实现是用线性同余法做的, 所以生 ...

  7. 2019-2020-1 20199325《Linux内核原理与分析》第九周作业

    第九周作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个sc ...

  8. QT 的 parent 该如何理解

    对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示.QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件. QWidget是所有窗 ...

  9. 交换机上的MAC地址表

    拓扑图: 1.首先在R1上的配置: R1(config)#int R1(config)#interface g R1(config)#interface gigabitEthernet 0/0 R1( ...

  10. 在独立的 Root 和 Home 硬盘驱动器上安装 Ubuntu

    安装 Linux 系统时,可以有两种不同的方式.第一种方式是在一个超快的固态硬盘上进行安装,这样可以保证迅速开机和高速访问数据.第二种方式是在一个较慢但很强大的普通硬盘驱动器上安装,这样的硬盘转速快并 ...