SpringBoot集成Sharding-jdbc水平分表分库

SpringBoot集成Sharding-jdbc水平分表分库

  • 1.水平分表分库
  • 2.参数配置
    • 2.application.properties
  • 3.代码测试
    • 3.1 数据插入

1.水平分表分库

概念在之前写章中:Sharding-JDBC笔记1

2.参数配置

2.application.properties

# Server port
server.port=8080# MyBatis configuration
mybatis.mapper-locations=classpath:/mapper/*.xml
mybatis.type-aliases-package=com.test.sharding.domain.pojo
mybatis.configuration.map-underscore-to-camel-case=true# Spring Boot application properties
spring.main.allow-bean-definition-overriding=true
spring.application.name=sharding-jdbc-test-02# ShardingSphere configuration
spring.shardingsphere.props.sql.show=true# DataSource configuration  db1
spring.shardingsphere.datasource.names=db1,db2
spring.shardingsphere.datasource.db1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.db1.url=jdbc:mysql://localhost:3306/order_db_1?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.shardingsphere.datasource.db1.username=root
spring.shardingsphere.datasource.db1.password=root# DataSource configuration  db2
spring.shardingsphere.datasource.db2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.db2.url=jdbc:mysql://localhost:3306/order_db_2?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.shardingsphere.datasource.db2.username=root
spring.shardingsphere.datasource.db2.password=root#设置分库策略-以user_id列为数据库的分片键,
spring.shardingsphere.sharding.tables.t_order.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.t_order.database-strategy.inline.algorithm-expression=db$->{user_id % 2 +1}#设置分表策略
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=db$->{1..2}.t_order_$->{1..2}
spring.shardingsphere.sharding.tables.t_order.key-generator.column=order_id
spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{order_id % 2 + 1}
  • user_id % 2:这部分表示对 user_id 进行取模运算,模数为2。这样,user_id的值将被分为两类:偶数(结果为0)和奇数(结果为1)。

  • user_id % 2 + 1:这部分是在取模运算的结果上加1。这样,偶数 user_id 的结果将变为1,奇数 user_id的结果将变为2。

  • db$->{...}:这部分是ShardingSphere的语法,用于构建实际的数据库标识。$->{...} 中的表达式会计算出一个值,然后这个值会被插入到 db 前缀后面,从而形成一个完整的数据库名称。

 spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=db$->{1..2}.t_order_$->{1..2}

定义了实际的数据节点。这里表示数据被分布在两个数据库db1db2中,每个数据库下有两个表,分别是t_order_1t_order_2

spring.shardingsphere.sharding.tables.t_order.key-generator.column=order_id

定义了主键生成策略对应的列名,即order_id列。

spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE

指定了主键生成策略的类型为SNOWFLAKE,即使用雪花算法来生成主键。

 spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id

定义了分片键为order_id,即根据order_id的值来决定数据应该存储到哪个表中。

spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{order_id % 2 + 1}

定义了分片算法表达式。这里表示根据order_id的值取模2后加1的结果来决定数据应该存储到哪个表中。例如,order_id为奇数的数据会被存储到t_order_2表中,而order_id为偶数的数据会被存储到t_order_1表中。

3.代码测试

3.1 数据插入

ShardingMapper.java
@Mapper
public interface ShardingMapper {void insertOrder(@Param("order") Order order);}

插入语句:

  <insert id="insertOrder" parameterType="com.test.sharding.domain.pojo.Order">insert into t_order (order_price, user_id, order_status)values (#{order.orderPrice, jdbcType=DECIMAL}, #{order.userId, jdbcType=BIGINT}, #{order.orderStatus, jdbcType=VARCHAR})</insert>

测试语句:

    @PostMapping("/insertProduct")public String insertOrder(){Order order = new Order();for(int i = 1 ; i < 10 ; i++){order.setOrderPrice(BigDecimal.valueOf(i*10));order.setUserId(5L);shardingService.insertOrder(order);try {Thread.sleep(10);} catch (InterruptedException e) {throw new RuntimeException(e);}}return "插入成功!";}

插入结果:
在这里插入图片描述
因为user_id设置的是5L所以根据分片算法会将数据插入到order_db_2的数据库中:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636938.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow web入门 web180--web185

web180 import requests import recom re.compile("admin") def repisTrue(char):url f"http://自己环境的网址/api/?id1%27and%27{char}%27%27{char}&page1&limit10"res requests.get(url)w com.search(res.text)if w is not None:return T…

4.2冰达机器人:视觉实例-机器人视觉循线、视觉实例-调整循线颜色

4.2.10a视觉实例-机器人视觉循线 本节内容演示一个机器人视觉的视觉循线实例 准备工作&#xff1a;布置一块区域作为循线场所&#xff0c;如下图所示。用蓝色胶带在地面贴一条路线&#xff08;机器人极限转弯半径0.5m&#xff0c;不要贴得过于曲折&#xff09;&#xff0c;将…

leetcode8- 二叉树展开为链表

给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&#xf…

【ETAS CP AUTOSAR工具链】基本概念与开发流程

基于CP AUTOSAR进行控制器软件开发已渐渐成为业界的主流。CP领域中除了VECTOR&#xff0c;ETAS&#xff0c;EB&#xff0c;Mentor等外资公司&#xff0c;还有诸如普华&#xff0c;东软&#xff0c;恒润&#xff0c;华为等国产基础软件公司。 ETAS是在2015年推出的AUTOSAR量产版…

react09 hooks(useState)

react-09 hooks&#xff08;useState&#xff09; hooks组件&#xff08;函数组件动态化&#xff09; 其本质就是函数组件&#xff0c;引用一些hooks方法&#xff0c;用来在函数组件中进行例如状态管理&#xff0c;模拟类组件的生命周期等&#xff0c;只能运用到函数组件中 ho…

VMD变分编码器

ref&#xff1a;【变分模态分解(VMD)及其Python实现-哔哩哔哩】 https://b23.tv/bB9zPX1 注意看幅值 分别是1.0 0.25 1/16 画一张图上 蓝色&#xff1a;低频 绿色&#xff1a;高频信号 频谱看不懂 应用实例2

Linux实验一:NAT、桥接方式的验证

实验名称&#xff1a;在虚拟机中安装RHEL7&#xff0c;验证NAT、桥接上网方式 实验结果&#xff1a; 创建虚拟机 NAT模式 自动获取IP 手动配置IP 桥接模式 自动获取IP 手动配置IP 总结和分析&#xff1a;

深入解析K折交叉验证:原理、应用及优化策略(python实现 代码详解)

目录 一、K折交叉验证介绍 二、K折交叉验证的作用 三、在K折交叉验证中&#xff0c;每次模型的训练都是独立于上一次的 四、K折交叉验证用于比较不同模型的性能(python实现) 五、K折交叉验证用于超参数调优 六、K折交叉验证用于选择最优训练集和验证集&#xff0c;从而训练…

盲盒一番赏小程序:打开未知的惊喜之旅

在快节奏的生活中&#xff0c;人们总是渴望寻找一份属于自己的小确幸。盲盒一番赏小程序&#xff0c;正是这样一个为你带来无尽惊喜与乐趣的平台。我们精心打造这一小程序&#xff0c;让每一次点击都成为一次全新的探索&#xff0c;让每一次选择都充满无限可能。 盲盒一番赏小…

【Linux文件系统开发】认知篇

【Linux文件系统开发】认知篇 文章目录 【Linux文件系统开发】认知篇一、文件系统的概念二、文件系统的种类&#xff08;文件管理系统的方法&#xff09;三、分区四、文件系统目录结构五、虚拟文件系统&#xff08;Virtual File System&#xff09;1.概念2.原因3.作用4.总结 一…

【GoWeb框架初探————XORM篇】

1. XORM xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 1.1 特性 支持 Struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit, Join, Havi…

请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法和详细的解析。 题干 请编写一个函…