ShardingSphere-proxy添加自定义分片规则(踩坑日记)

文章目录

  • 一、新建spring boot项目
  • 二、编写代码
    • (1) 新建一个类
    • (2) doSharding方法详解
    • (3) 实际例子
  • 三、增加spi文件(很关键)
  • 四、打包
  • 五、把生成的文件放到ext-lib中
  • 六、yaml配置(怎么用)
  • 七、测试

版本环境
mysql 5.7.40
shardingsphere-proxy 5.5.0

一、新建spring boot项目

注意这里要建立一个空的spring boot项目。我这里采用maven创建项目。而不是用spring init去创建。

用这个创建
在这里插入图片描述
创建完成后,自己增加pom文件内容。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>sd-sample</artifactId><version>1.0-SNAPSHOT</version><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.14</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-sharding-api</artifactId><version>5.4.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>compile</scope></dependency></dependencies></project>

要注意,我用的是shardingproxy5.5.0的版本。但是api用了5.4.0版本,不能用5.1.0版本。否则编译出来的程序会报错。用5.4.0的是因为我的pom拉不下5.5.0,没时间去调整maven
在这里插入图片描述

二、编写代码

(1) 新建一个类

这个类要实现rg.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm
在这里插入图片描述

(2) doSharding方法详解

程序主要根据自己的逻辑实现doSharding方法。
在这里插入图片描述

(3) 实际例子

这里代码,要特别注意以下几点
这里代码,要特别注意以下几点
这里代码,要特别注意以下几点
1.有两个doSharding方法需要实现,一个是当条件语句是=,in的时候使用的分片算法。另外一个是<>,between的时候使用的算法。
2.getType方法中返回的是这个算法的名称,自己定义。yaml中要用到的。


package com.demo.order_sharding;import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;import java.util.Collection;@Slf4j
public class ShardingDatabaseModuloAlgorithm implements StandardShardingAlgorithm<String> {/*** 精确查询分片执行接口(对应的sql是where ??=值)* @param collection: 可用的分片名集合(分库就是库名,分表就是表名)* @param preciseShardingValue: 分片键* @return 分片名*/@Overridepublic String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {String  logicTableName=preciseShardingValue.getLogicTableName();        //得到逻辑表名,就是sql语句的逻辑表//log.info("{}",logicTableName);String busCode=preciseShardingValue.getValue(); //得到分片字段的值,这里分片用的是bus_code字段,系统会把这个字段传过来。//根据bus_code进行分片的后缀名称String busType="0";if(busCode.startsWith("Z0A")){busType="1";}else if(busCode.startsWith("S2Y")){busType="2";}else {busType="0";}//返回实际表或者库String target=logicTableName+"_"+busType;if(collection.contains(target)){return target;}throw new UnsupportedOperationException("route: " + busCode + " is not supported, please check your config");//return null;}/**** 范围分片规则(对应的是where ??>='XXX' and ??<='XXX')* 范围查询分片算法(分片键涉及区间查询时会进入该方法进行分片计算)* @param collection* @param rangeShardingValue* @return 返回多个分片名*/@Overridepublic Collection<String> doSharding(Collection<String> collection, RangeShardingValue<String> rangeShardingValue) {//这里返回所有的集合,也就是会到所有的表里执行语句return collection;}@Overridepublic String getType() {return "SHARD_BUS_TYPE"; //算法名称,可以自己定义。注意yaml中要用这个名字}
}

三、增加spi文件(很关键)

如下图
在这里插入图片描述

  • 在resources中添加META-INFO/services目录
  • 在目录中添加文件org.apache…(如上图)
  • 文件中写上你的类名称:com.demo.order_sharding.ShardingDatabaseModuloAlgorithm(如下图)

在这里插入图片描述

四、打包

mvn package

五、把生成的文件放到ext-lib中

生成的文件放到shardingsphere-proxy的ext-lib中。在这里插入图片描述

六、yaml配置(怎么用)

在这里插入图片描述
在这里插入图片描述

  • 分表规则填写要的字段bus_code
  • 分表名称填写好,在对应的规则里只要填写SHARD_BUS_TYPE.

这个SHARD_BUS_TYPE是哪里来的?
看这个代码:
在这里插入图片描述

七、测试

这里不多说了,用navcate连上去,执行就好了。

CREATE TABLE `t_bus_type` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`bus_code` varchar(30) DEFAULT NULL,`user_id` bigint(20) DEFAULT NULL,`amount` decimal(10,2) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=779468255126355969 DEFAULT CHARSET=utf8mb4;insert into t_bus_type(bus_code) values('S2Y-0002');

最后还有一个写的也比较好的帖子,这里 分享一下

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

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

相关文章

湘潭大学信息与网络安全复习笔记2(总览)

前面的实验和作业反正已经结束了&#xff0c;现在就是集中火力把剩下的内容复习一遍&#xff0c;这一篇博客的内容主要是参考教学大纲和教学日历 文章目录 教学日历教学大纲 教学日历 总共 12 次课&#xff0c;第一次课是概述&#xff0c;第二次和第三次课是密码学基础&#x…

[渗透测试学习] Runner-HackTheBox

Runner-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.13扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.18.0 (Ubuntu) 8000…

中小制造业工厂要不要上MES系统

MES系统的主要功能包括制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等。通过这些模块&#xff0c;MES为企业打造一个…

基于springboot实现农产品直卖平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现农产品直卖平台系统的设计演示 摘要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔…

快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发

基于LangChain的快速RAG应用原型制作方法 还记得构建智能聊天机器人需要数月编码的日子吗&#xff1f; LangChain这样的框架确实简化了开发流程&#xff0c;但对非程序员来说&#xff0c;数百行代码仍然是一道门槛。 有没有更简单的方法呢&#xff1f; 图片由 Ravi Palwe 在…

适用于 macOS 的最佳免费数据恢复软件

升级到 macOS 后&#xff0c;它可以帮助您从 HDD、SSD、存储卡、USB 闪存驱动器、数码相机或其他存储介质设备中完全恢复已删除、格式化或无法访问的数据。 当 macOS Monterey 用户寻找数据恢复解决方案时&#xff0c;免费数据恢复软件始终是一个不错的选择。实际上&#xff0…

Linux基础命令[29]-chown

文章目录 1. chown 命令说明2. chown 命令语法3. chown 命令示例3.1 修改属主3.2 修改属组3.3 修改属主和属组3.4 修改文件夹所属 4. 总结 1. chown 命令说明 chown&#xff1a;更改文件的用户或用户组&#xff0c;需要 root 用户或 sudo 权限的用户执行该命令。基本信息如下&…

Mac M3 Pro 部署Spark-2.3.2 On Hive-3.1.3

mac的配置如下 1、下载安装包 官网 Apache Projects Releases 在search中搜索hadoop、hive spark &#xff1a; Index of /dist/spark/spark-2.3.2 网盘 Hadoop https://pan.baidu.com/s/1p4BXq2mvby2B76lmpiEjnA?pwdr62r 提取码: r62r Hive https://pan.baidu.com/s/…

el-table表头修改文字或者背景颜色,通过header-row-style设置样式

方式一 <el-table :header-cell-style"{text-align: center}" />方式二 <template><el-table :header-cell-style"tableHeaderColor" /> </template> <script> export default {methods: {tableHeaderColor ({row, column…

RabbitMQ实践——交换器(Exchange)绑定交换器

在《RabbitMQ实践——交换器&#xff08;Exchange&#xff09;和绑定&#xff08;Banding&#xff09;》一文中&#xff0c;我们实验了各种交换器。我们可以把交换器看成消息发布的入口&#xff0c;而消息路由规则则是由“绑定关系”&#xff08;Banding&#xff09;来定义&…

小分子水半幅宽检测 低氘水同位素氘检测 富氢水检测

小分子水半幅宽检测 低氘水同位素氘检测 富氢水检测 检测范围: 矿泉水等饮用水 检测概述 小分子团水活化性很强&#xff0c;具有强渗透力&#xff0c;强溶解力&#xff0c;强扩散力。水的含氧量高&#xff0c;能给人体内的组织细胞带来更多的氧。长自来水大分子团核磁共振测得…

【计算机毕业设计】基于springboot的大创管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

C# TextBox模糊查询及输入提示

在程序中&#xff0c;我们经常会遇到文本框中不知道输入什么内容&#xff0c;这时我们可以在文本框中显示提示词提示用户&#xff1b;或者需要查询某个内容却记不清完整信息&#xff0c;通常可以通过文本框列出与输入词相匹配的信息&#xff0c;帮助用户快速索引信息。 文本框…

外链建设如何进行?

理解dofollow和nofollow链接&#xff0c;所谓dofollow链接&#xff0c;就是可以传递权重到你的网站的链接&#xff0c;这种链接对你的网站排名非常有帮助&#xff0c;这种链接可以推动你的网站在搜索结果中的位置向上爬&#xff0c;但一个网站全是这种有用的链接&#xff0c;反…

【已解决】引用官网的 Element-Message 消息框居然报错为什么呢?

vue 版本 &#xff1a; vue3 编程语言&#xff1a;JavaScript os: macos13 组件 &#xff1a;element-plus 问题组件&#xff1a; Message 信息框 问题&#xff1a;想学习使用 element 官网里的组件&#xff0c;我找到了message 消息提示&#xff0c;然后我就把代码复制下来放到…

Node.js和npm的安装及配置

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞 I/O 的模型。 npm&#xff08;node package manager&#xff09;是一个 Node.js 包管理和分发工具&#xff0c;也是整个 Node.js 社区最流行、支持第三方模块最多的包管理器。使…

【FireSim/Chipyard】解决FireSim Repo Setup步骤中Conda的firesim环境下载失败的问题

【FireSim/Chipyard】解决FireSim Repo Setup步骤中Conda的firesim环境下载失败的问题 问题描述 按照U250官方文档下载Conda环境的时候&#xff0c;即语句./scripts/machine-launch-script.sh --prefix REPLACE_ME_USER_CONDA_LOCATION的时候会遇到以下报错&#xff1a; Sol…

30KW高原汽油发电机,海拔5000米可使用

大汉动力高原汽油发电机是专为高原地区设计的发电设备&#xff0c;其设计和特性考虑了高原环境的特别性。以下是关于高原汽油发电机的一些关键信息&#xff1a; 设计特点&#xff1a; 高原适应性&#xff1a;高原地区海拔高&#xff0c;空气稀薄&#xff0c;氧气含量低&#x…

CrossOver 2024软件安装包下载

CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏&#xff0c;而不需虚拟机。它为Windows软件提供所需的资源&#xff0c;以达到在Mac OS X系统上运行Windows程序的目的。 安 装…

Spring Security——结合JWT实现令牌的验证与授权

目录 JWT&#xff08;JSON Web Token&#xff09; 项目总结 新建一个SpringBoot项目 pom.xml PayloadDto JwtUtil工具类 MyAuthenticationSuccessHandler&#xff08;验证成功处理器&#xff09; JwtAuthenticationFilter&#xff08;自定义token过滤器&#xff09; W…