【Sharding-Sphere 整合SpringBoot】

Sharding-Jdbc在3.0后改名为Sharding-Sphere。Sharding-Sphere相关资料,请自行网上查阅,这里仅仅介绍了实战相关内容,算是抛砖引玉。

Sharding-Sphere 整合SpringBoot

  • 一、项目准备
  • 二、项目实战
    • 1. pom.xml及application.yml
    • 2. OrderInfoController
    • 3. OrderInfoService
    • 4. OrderInfo
    • 5. OrderInfoMapper
    • 6. USerTablePreciseShardingAlgorithm
  • 三、项目测试
    • 1.利用postman测试接口
    • 2.数据库结果
  • 四、项目结构及源码下载
    • 1.项目结构
    • 2.源码下载

一、项目准备

创建12张order_info表
这里以创建order_info_01为例

CREATE TABLE `order_info_01` (`id` varchar(100) NOT NULL,`create_date` date DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、项目实战

1. pom.xml及application.yml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/></parent><groupId>com.bst</groupId><artifactId>shard</artifactId><version>0.0.1-SNAPSHOT</version><name>shard</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><sharding-sphere.version>4.1.1</sharding-sphere.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--apache提供的众多commons工具包--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8</version></dependency><!-- fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.1</version></dependency><!-- 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version></dependency><!-- druid数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.22</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 日志 --><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- 热部署插件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!-- shardingJDBC--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>${sharding-sphere.version}</version></dependency><dependency><groupId>com.xiaoleilu</groupId><artifactId>hutool-all</artifactId><version>3.2.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server:port: 8080tomcat:uri-encoding: UTF-8max-threads: 1000min-spare-threads: 10
logging:level:com.taguan: debug
spring:shardingsphere:datasource:names: db1db1: # 数据库type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=trueusername: rootpassword: root1234sharding:tables:order_info:  ## 配置表的分布,表的策略#actual-data-nodes:actual-data-nodes: db1.order_info_0$->{1..9},db1.order_info_1$->{0..2}# 指定tg_weld_after_rule_表 主键id 生成策略为 SNOWFLAKEkey-generator:column: idtype: SNOWFLAKE# 指定分片策略table-strategy:#            inline:##              约定id值是偶数添加到tg_weld_after_rule_0表,如果id是奇数添加到tg_weld_after_rule_1表#              sharding-column: id#              algorithm-expression: tg_weld_after_rule_$->{id%2}standard:#根据年月份进行分表,分表规则自定义handlersharding-column: create_dateprecise-algorithm-class-name: com.huahua.shard.myShard.USerTablePreciseShardingAlgorithmprops:# 打开sql输出日志sql:show: true

2. OrderInfoController

@RestController
public class OrderInfoController {@Autowiredprivate OrderInfoService orderInfoService;@RequestMapping("add")public String add() throws ParseException {return orderInfoService.add();}@RequestMapping("get")@ResponseBodypublic Object get() {return orderInfoService.get();}
}

3. OrderInfoService

@Service
public class OrderInfoService {@Autowiredprivate OrderInfoMapper orderInfoMapper;public String add() throws ParseException {SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");for (int i = 0; i < 10; i++) {OrderInfo orderInfo = new OrderInfo();orderInfo.setId(UUID.randomUUID().toString());int a = RandomUtils.nextInt(1, 9);String dateStr = "2024-09-1" + a;Date date = formatter.parse(dateStr);orderInfo.setCreateDate(date);orderInfoMapper.insert(orderInfo);orderInfo.setId(UUID.randomUUID().toString());String dateS = "2024-10-1" + a;orderInfo.setCreateDate(formatter.parse(dateS));orderInfoMapper.insert(orderInfo);orderInfo.setId(UUID.randomUUID().toString());String date2S = "2024-11-1" + a;orderInfo.setCreateDate(formatter.parse(date2S));orderInfoMapper.insert(orderInfo);orderInfo.setId(UUID.randomUUID().toString());String date22S = "2024-12-1" + a;orderInfo.setCreateDate(formatter.parse(date22S));orderInfoMapper.insert(orderInfo);}return "0";}public Object get() {QueryWrapper<OrderInfo> wrapper = new QueryWrapper<>();//wrapper.eq("create_date","2024-08-08");return orderInfoMapper.selectList(wrapper);}
}

4. OrderInfo

@Data
public class OrderInfo {private String id;private Date createDate;
}

5. OrderInfoMapper

public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
}

6. USerTablePreciseShardingAlgorithm

自定义算法规则

public class USerTablePreciseShardingAlgorithm implements PreciseShardingAlgorithm<Date> {private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");@Overridepublic String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {try {String tableName = preciseShardingValue.getLogicTableName();String dataTime;if (preciseShardingValue.getValue() != null) {dataTime = formatter.format(preciseShardingValue.getValue());} else {throw new IllegalArgumentException("没有匹配到库");}// 按照月份,拼接数据库表名return tableName.concat("_").concat(dataTime.substring(5, 7));} catch (Exception e) {throw new IllegalArgumentException("没有匹配到库:" + preciseShardingValue.getValue());}}
}

三、项目测试

1.利用postman测试接口

在这里插入图片描述

2.数据库结果

四、项目结构及源码下载

1.项目结构

在这里插入图片描述

2.源码下载

点我下载,欢迎Star哦~~

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

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

相关文章

串行Nor Flash的结构和参数特性

文章目录 引言1、Nor Flash的结构2、Nor Flash的类别3.标准Serial Nor Flash的特征属性1.Wide Range VCC Flash2.Permanent Lock3.Default Lock Protection4.Standard Serial Interface5.Multi-I/O6.Multi-I/O Duplex (DTR)7.XIP&#xff08;片上执行&#xff09; 4.标准Serial…

Java内置锁:深度解析Lock接口中lock方法和lockInterruptibly方法

Java11中的Lock接口提供lock()和lockInterruptibly()两种锁定方法&#xff0c;用于获取锁&#xff0c;但处理线程中断时有所不同&#xff0c;lock()使线程等待直到锁释放&#xff0c;期间无视中断&#xff1b;而lockInterruptibly()在等待中若收到中断请求&#xff0c;会立即响…

倍福PLC控制器开发环境介绍

倍福PLC控制器是一款功能强大、易于使用的可编程逻辑控制器&#xff0c;广泛应用于各种工业自动化控制系统中。为了充分发挥倍福PLC控制器的功能&#xff0c;需要使用合适的开发环境。下面将介绍倍福PLC控制器的开发环境&#xff0c;主要包括软件安装与配置、工程创建与管理、编…

“超人练习法”系列08:ZPD 理论

01 先认识一个靓仔 看过 Lev Vygotsky 这个人的书吗&#xff1f;他是一位熟练心理学家&#xff0c;对人们习得技能的方式非常感兴趣&#xff0c;但他 37 岁的时候就因肺炎英年早逝了。 他认为社会环境对学习有关键性的作用&#xff0c;认为社会因素与个人因素的整合促成了学习…

element ui el-table展示列表,结合分页+过滤功能

vueelement-ui实现的列表展示&#xff0c;列表分页&#xff0c;列表筛选功能 1&#xff0c;分页器 el-table模块下面是分页器代码 <el-pagination></el-pagination> <el-table></el-table> <!-- 分页器 --><div class"block" st…

力扣每日一练(24-1-13)

如果用列表生成式&#xff0c;可以满足输出的型式&#xff0c;但是不满足题意&#xff1a; nums[:] [i for i in nums if i ! val]return len(nums) 题意要求是&#xff1a; 你需要原地修改数组&#xff0c;并且只使用O(1)的额外空间。这意味着我们不能创建新的列表&#xff…

【QT】标准对话框

目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3&#xff0e;选择已有目录 4&#xff0e;选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2&#xff0e;输入整数 3&#xff0e;输入…

Python教程(23)——Python类中常用的特殊成员

在Python中&#xff0c;类特殊成员是指以双下划线开头和结尾的属性和方法&#xff0c;也被称为魔术方法&#xff08;Magic methods&#xff09;或特殊方法&#xff08;Special methods&#xff09;。这些特殊成员在类的定义中具有特殊的语法和功能&#xff0c;用于实现对象的特…

【PlantUML】-类图-布局,如何改变元素位置

写在前面 PlantUML属于自动布局。掌握好&#xff0c;是一件利器&#xff0c;掌握不好&#xff0c;就会不知其所以然。尤其在布局方面&#xff0c;因为它的布局可能会和你想的不太一样。本篇文章以例子为基础&#xff0c;简单地说几个在实际应用过程中摸索出来的原则。相信看完这…

【猫头虎分享】全面揭秘鸿蒙4.0:华为的技术革新与市场影响

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

逆变器3前级推免(高频变压器)

一节电池标压是在2.8V—4.2V之间&#xff0c;所以24V电压需要大概七节电池串联。七节电池电压大概在19.6V—29.4V之间。 从24V的电池逆变到到220V需要升压的过程。那么我们具体需要升压到多少&#xff1f; 市电AC220V是有效值电压&#xff0c;峰值电压是220V*1.414311V 如果…

ssm基于Javaweb的物流信息管理系统的设计与实现论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统物流信息管理难度大&#xff0c;容错率低&#xff0c;管理…

数据结构——排序算法之快速排序

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。 基本思想&…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单&#xff0c;但必须记住一点&#xff1a;opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0&#xff0c;opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后&#xff0c;默认看到的是git分支&…

NAS搭建NextCloud集成OnlyOffice

1、安装NextCloud&#xff08;如果总是中断就换个镜像源&#xff09; 2、创建容器 如果需要穿透选HOST 端口必须80 读写必须开 3、启动容器并配置&#xff0c;看图。 启动看日志&#xff0c;等启动完成再访问。首次启动大约5-10分钟左右。 成功后&#xff0c;我们正常进行安装…

学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

背景 学习使用 XPath 表达式来实现找到目标元素时智能封装等待执行测试代码启动Chrome浏览器后&#xff0c;地址栏只显示data&#xff1b; 代码如下 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from …

6.2 声音编辑工具GoldWave5简介(5)

6.2.4录制声音 利用Windows自带的“录音机”录制声音时&#xff0c;只能录制最大时长为1分钟的声音&#xff0c;而利用GoldWave5&#xff0c;可以录制时长长达277小时以上的声音&#xff0c;而且&#xff0c;录制完成后&#xff0c;还可以很方便地对声音进行处理、转换等操作。…

记录用python封装的第一个小程序

前言 我要封装的是前段时间复现的一个视频融合拼接的程序&#xff0c;现在我打算将他封装成exe程序&#xff0c;我在这里只记录一下我封装的过程&#xff0c;使用的是pyinstaller&#xff0c;具体的封装知识我就不多说了&#xff0c;可以参考我另一篇博客&#xff1a;将Python…

NLP技术在搜索推荐场景中的应用

NLP技术在搜索推荐中的应用非常广泛&#xff0c;例如在搜索广告的CTR预估模型中&#xff0c;NLP技术可以从语义角度提取一些对CTR预测有效的信息&#xff1b;在搜索场景中&#xff0c;也经常需要使用NLP技术确定展现的物料与搜索query的相关性&#xff0c;过滤掉相关性较差的物…

力扣2182.构造限制重复的字符串

思路&#xff1a;先记录每个字符的出现次数&#xff0c;构建一个新字符串&#xff0c;从尾取字符&#xff0c;每取一个该字符个数-1&#xff0c;若该字符已经取到有repeatLimit个&#xff0c;则递归取次大的字符&#xff0c;并对应字符个数-1&#xff0c;若没有次大字符了&…