shardingsphere5 自定义分片(sharding-algorithm)算法

背景 

在做分表时,需要自定义算法。 这里实现的算法是:  分表字段的 hashCode 取余。

算法


public class UserShardingAlgorithm implements StandardShardingAlgorithm<String> {public static String type = "USER_SHARDING_STRATEGY";/*** 分表数量*/private int num;@Overridepublic void init(Properties props) {this.num = Integer.valueOf(props.get("number").toString());}@Overridepublic String getType() {return type;}@Overridepublic String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {String value = shardingValue.getValue();return shardingValue.getDataNodeInfo().getPrefix() + (value.hashCode() % num);}@Overridepublic Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<String> shardingValue) {return availableTargetNames;}
}

测试代码

 修改下数据库配置,直接运行main 方法就可以。

public static void main(String[] args) throws Exception {ShardingRuleConfiguration result = new ShardingRuleConfiguration();// 分表配置ShardingTableRuleConfiguration shardingTableRuleConfiguration =new ShardingTableRuleConfiguration("user", "user_read.user_$->{0..1}");//  分表字段, 分表算法StandardShardingStrategyConfiguration standardShardingStrategyConfiguration= new StandardShardingStrategyConfiguration("open_id", UserShardingAlgorithm.type);shardingTableRuleConfiguration.setTableShardingStrategy(standardShardingStrategyConfiguration);// 住建 key  生成策略KeyGenerateStrategyConfiguration keyGenerateStrategyConfiguration =new KeyGenerateStrategyConfiguration("id", "SNOWFLAKE");shardingTableRuleConfiguration.setKeyGenerateStrategy(keyGenerateStrategyConfiguration);result.getTables().add(shardingTableRuleConfiguration);// key 生成算法的 work_idProperties properties = new Properties();properties.put("work_id", new Random().nextInt(1024));result.getKeyGenerators().put("SNOWFLAKE", new AlgorithmConfiguration("SNOWFLAKE", properties));Properties userSharding = new Properties();userSharding.put("strategy", "standard");userSharding.put("number", 2);userSharding.put("algorithmClassName", UserShardingAlgorithm.class.getName());result.getShardingAlgorithms().put(UserShardingAlgorithm.type,new AlgorithmConfiguration("CLASS_BASED", userSharding));Map<String, DataSource> map = createDatasource();// 创建 dbDataSource dataSource =ShardingSphereDataSourceFactory.createDataSource(map, Lists.newArrayList(result), new Properties());Connection connection = dataSource.getConnection();PreparedStatement preparedStatement = connection.prepareStatement("insert into user (open_id) values (?)");preparedStatement.setString(1, UUID.randomUUID().toString());// 执行int execute = preparedStatement.executeUpdate();System.out.printf("ShardingJdbcDemo.main: " + execute);connection.close();}private static Map<String, DataSource> createDatasource() {DruidDataSource druidDataSource = new DruidDataSource();Map<String, DataSource> objectObjectHashMap = new HashMap<>();druidDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/user_read?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true");druidDataSource.setUsername("root");druidDataSource.setPassword("123456");druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");objectObjectHashMap.put("user_read", druidDataSource);return objectObjectHashMap;}

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

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

相关文章

2024KCon大会议题招募火热进行中

历时1个多月我们收到了来自全国各地小伙伴们的议题投递既有前瞻性的技术研判亦有安全领域的最新策略......感谢每一位对KCon大会倾注热情与支持的你&#xff01; 我们也收到了不少小伙伴的私信&#xff0c;有的因为工作繁忙有的因为在紧张备战2024网络安全攻防演练表示原定的时…

LeetCode2542最大子序列的分数

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;两者长度都是 n &#xff0c;再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。 对于选择的下标 i0 &#xff0c;i1 &#xff0c;…&#xff0c; ik - 1 &#xff0c;你的 …

监控易监测对象及指标之:全面监控LDAP服务器

随着企业信息化建设的不断深入&#xff0c;LDAP&#xff08;轻量级目录访问协议&#xff09;服务器作为重要的目录服务组件&#xff0c;其稳定性和性能直接关系到企业业务的连续性和 效率。为了确保LDAP服务器的稳定运行和高效性能&#xff0c;对其进行全面监控显得尤为重要。…

Kafka原生API使用Java代码-消费者组-消费模式

文章目录 1、消费模式1.1、创建一个3分区1副本的 主题 my_topic11.2、创建生产者 KafkaProducer11.2、创建消费者1.2.1、创建消费者 KafkaConsumer1Group1 并指定组 my_group11.2.3、创建消费者 KafkaConsumer2Group1 并指定组 my_group11.2.3、创建消费者 KafkaConsumer3Group…

算法练习第25天|491. 非递减子序列

491. 非递减子序列 491. 非递减子序列https://leetcode.cn/problems/non-decreasing-subsequences/ 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案…

Flutter 中的 ButtonTheme 小部件:全面指南

Flutter 中的 ButtonTheme 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它提供了一系列的组件来帮助开发者构建美观且功能丰富的应用。在 Flutter 的组件库中&#xff0c;ButtonTheme 是一个重要的小部件&#xff0c;它允许开发者统…

Linux、Windows安装python环境(最新版及历史版本指定版本)-python

目录 一、Linux环境二、windows环境最新版本下载指定版本下载 python 官网地址&#xff1a; https://www.python.org/ 一、Linux环境 以openEuler/CentOS为例 查看可安装python源版本 dnf provides python*默认安装新版本 dnf install -y python3. 进入python python退出p…

电源小白入门学习8——电荷泵电路原理及使用注意事项

电源小白入门学习8——电荷泵电路原理及使用注意事项 电荷泵简介电荷泵原理电荷泵设计过程中需要注意的点fly电容的安秒平衡DC/DC功率转换技术对比 电荷泵简介 电荷泵&#xff08;Charge Pump&#xff09;是一种电路拓扑结构&#xff0c;用于实现电压升压或降压的功能。它通过…

Python自动化测试断言详细实战代码(建议收藏)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在测试用例中&#xff0c;执行完测试用例后&#xff0c;最后一步是判断测试结果是 pass 还是 fa…

sh发送邮件如何通过配置SMTP服务器来实现?

sh发送邮件的操作方法&#xff1f;如何使用Shell脚本自动发信&#xff1f; 在Shell脚本中实现邮件发送功能是一项常见需求&#xff0c;特别是在自动化任务执行或系统监控中。AokSend将介绍如何通过配置SMTP服务器来实现sh发送邮件的方法和注意事项。 sh发送邮件&#xff1a;安…

Redash、Superset、DataEase、Metabase、FineBI 和 Power BI 报表系统的优缺点

最近在做报表系统的选型与调研&#xff0c;其中尝试了Redash、Superset、DataEase、Metabase、FineBI 和 Power BI几个报表系统&#xff0c;主要想使用开源免费的&#xff0c;如果大家有好用的报表系统推荐欢迎留言。 Redash 优点&#xff1a; 开源且免费&#xff1a;Redash…

【已解决】Error in the HTTP2 framing layer

1.问题描述 在使用git将代码上传github的时候在最后一部push的时候遇到这个fatal 2.解决方案 由于我原先设置的origin是http协议下的&#xff0c;如下 git remote add origin https://github.com/Charlesbibi/Simple_Cloud.githttp协议下行不通不妨试一试ssh协议下&#xff…

跟风报考PMP,我真的后悔了

真的太香吧&#xff01; 我一开始没打算报考PMP证书的&#xff0c;但是我看身边很多朋友都因为PMP证书得到了升职加薪&#xff0c;这让我实在是一整个羡慕住了&#xff0c;所以我也去报考了PMP。 报考PMP前期我做了什么&#xff1f; 由于我是零基础&#xff0c;没有什么项目…

探索网格生成技术在AI去衣应用中的作用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理和计算机视觉领域的应用日益广泛。其中&#xff0c;AI去衣技术作为一种新兴的应用&#xff0c;引起了广泛的关注和讨论。然而&#xff0c;要实现这一功能并非易事&#xff0c;需要借助于先进的算法和技术。…

Mybatis第一讲——你会Mybatis吗?

文章目录 什么是MybatisMybatis的作用是什么 Mybatis 怎么使用注解的方式注解的多种使用Options注解ResultType注解 XML的方式update标签 #{} 和 ${}符号的区别#{}占位${}占位 ${}占位的危险性(SQL注入)数据库连接池 什么是Mybatis 首先什么是Mybatis呢&#xff1f;Mybatis是一…

latex bib引参考文献

1.bib内容 2.sn-mathphys-num是官方的参考文献格式 3.不用导cite包&#xff0c;文中这么写 4.end document前ckwx是自己命名的bib的名字

Ollama教程,本地部署大模型Ollama,docker安装方法,仅供学习使用

不可商用&#xff01;&#xff01;仅仅提供学习使用&#xff01; 先上视频教学&#xff1a; Ollama教程&#xff0c;本地部署大模型Ollama&#xff0c;docker安装方法&#xff0c;仅供学习使用&#xff01; 资料获取 &#xff1a; Ollama下载包和安装文档在这里&#xff1…

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录 一、在Eclipse中构建Maven项目 1.全局配置Maven 2.配置JDK路径 3.创建Maven项目 4.引入selenium-java依赖 二、Chrome自动化脚本编写 1.创建一个ChromeTest类 2.测试ChromeDriver 3.下载chromedriver驱动 4.在脚本中通过System.setProperty方法指定chromedriver的…

vi和vim有什么不同?

vi 和 vim 都是流行的文本编辑器&#xff0c;它们之间有以下主要区别&#xff1a; 历史&#xff1a; vi 是一个非常古老的文本编辑器&#xff0c;最初由 Bill Joy 在 1976 年为 Unix 系统编写。vim&#xff08;Vi IMproved&#xff09;是 vi 的一个增强版&#xff0c;由 Bram M…

Ubuntu 20.04安装CMake 3.22.6版本

Ubuntu 20.04通过apt安装的cmake版本是3.16.3&#xff0c;默认安装到/usr/bin/cmake路径。 $ cmake Command cmake not found, but can be installed with:sudo snap install cmake # version 3.29.3, or sudo apt install cmake # version 3.16.3-1ubuntu1.20.04.1See sna…