ShardingSphere+JPA+Druid实现分表操作

要在SpringBoot项目中实现分表操作,本文使用的是ShardingSphere+JPA+Druid实现。过程中出现问题记录一下。

  1. 准备MySQL数据库表
    这里准备的是一张主表test_cost,两张从表test_cost_0和test_cost_1,结构需要相同,主表只是声明了表结构,供后端框架提供映射关系,不存储数据,从表是真正存储数据的表。
    在这里插入图片描述
  2. 引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.0</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId><version>2.6.0</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.6.0</version><scope>test</scope>
</dependency>
<!-- ShardingSphere -->
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.0</version>
</dependency>
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-crypto</artifactId><version>5.7.8</version> 
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version>
</dependency>
<!-- Druid数据源 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version>
</dependency>
  1. 配置文件
server:port: 8080spring:jpa:properties:hibernate:hbm2ddl:auto: updatedialect: org.hibernate.dialect.MySQL5Dialectshow_sql: trueddl-auto: create-dropshardingsphere:datasource:names: books # 数据库名称books:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: 980828rules:sharding:sharding-algorithms: #分片算法配置table-inline:type: INLINEprops:algorithm-expression: test_cost_$->{ id % 2 }key-generators: #主键生成策略snowflake:type: SNOWFLAKEprops:worker-id: 1tables: #分表策略test_cost: # 主表名称actual-data-nodes: books.test_cost_$->{0..1}table-strategy:standard:sharding-column: idsharding-algorithm-name: table-inlineprops:sql-show: true

这里的分片算法是根据id字段能否被2整除来分,分到两张从表中。

  1. Repository
@Repository
public interface TestRepository extends JpaRepository<TestEntity, Long> {
}
  1. 实体类
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "test_cost")
public class TestEntity {@Id@GeneratedValue(strategy = GenerationType.AUTO)private int id;private String name;private String gender;private String country;private BigDecimal cost;}

在配置文件中配置了主键生成策略和分片算法,此处@GeneratedValue不能选IDENTITY,要选AUTO,由jpa自动选择。@Table的值为主表的表名。

  1. 遇见问题
    项目启动失败,出现了下图所示的异常:
    在这里插入图片描述
    从sharding官网的FAQ中发现如下解释:
    在这里插入图片描述

解决方案有两个:

  • 去掉druid-spring-boot-starter,直接使用druid-xxx.jar来替代,这就不会出现两个数据源冲突的问题
  • 仍然使用druid-spring-boot-starter,但是在springboot的启动类上exclude掉DruidDataSourceAutoConfigure这个类,忽略druid连接池的默认数据源配置(@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class}))

这里采用的是第二种方式:

@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class SpringbootRedisApplication {public static void main(String[] args) {SpringApplication.run(SpringbootRedisApplication.class, args);}}
  1. 启动项目,报错:java.sql.SQLException: url not set
    在这里插入图片描述
    原因是配置文件的数据源处的数据库URL的键应为“url”而不是“jdbc-url”!!!(3中提供的是正确的配置)
    在这里插入图片描述
    改成url后,重新启动,运行正常。

  2. 运行结果
    在这里插入图片描述
    在这里插入图片描述
    成功按照分片算法插入到对应的分表中。

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

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

相关文章

嵌入式学习-ARM

嵌入式学习-ARM STM32串口控制三盏灯亮灭 MAIN.C #include "uart4.h" int main() {uart4_init();gpio_init();char str[32];while (1){gets(str);if (my_strcmp(str,"A") 0){led1();}else if (my_strcmp(str,"B") 0){led2();}else if (my_s…

用大语言模型控制交通信号灯,有效缓解拥堵!

城市交通拥堵是一个全球性的问题&#xff0c;在众多缓解交通拥堵的策略中&#xff0c;提高路口交通信号控制的效率至关重要。传统的基于规则的交通信号控制&#xff08;TSC&#xff09;方法&#xff0c;由于其静态的、基于规则的算法&#xff0c;无法完全适应城市交通不断变化的…

Tabulator-tables5.6版本升级6.0版本

npm install tabulator-table 报错内容 /node_modules/tabulator-tables/dist/js/tabulator_esm.js 658:19 Module parse failed: Unexpected token (658:19) You may need an appropriate loader to handle this file type, currently no loaders are configured to process…

Tensorflow2.0笔记 - 链式法则例子

本笔记简单记录链式法则的原理&#xff0c;关于链式法则&#xff0c;本身和高等数学中的链式求导法则是一样的&#xff0c;深度学习中相关资料可以参考这里&#xff1a; 【深度学习之美22】BP算法详解之链式法则 - 知乎10.5 什么是计算图&#xff1f;我们知道&#xff0c; 神经…

Windows环境下编译ffmpeg 6.1源码--Virtual Studio + Msys2方式

环境准备 约定&#xff1a;源码全部放到sources下&#xff0c;目录结构说明 /d/java/ffmpeg #工程工目录 ├── build #存放编译文件的目录&#xff0c;子目录为具体模块的构建目录 │ ├── fdk-aac │ ├── ffmpeg │ └── x264 ├── instal…

机器学习流程—AutoML

文章目录 机器学习流程—AutoMLAutoML工具Auto-SKLearnMLBoxTPOTRapidMinerPyCaretAuto-KerasH2OAutoML谷歌AutoML云Uber LudwigTransmogrifAIAutoGluonAutoWekaDataRobot

稀碎从零算法笔记Day24-LeetCode:存在重复元素

前言&#xff1a;本打算练习下机写快排&#xff0c;但是快排超时了(为什么sort没超时啊。。) 题型&#xff1a;排序、哈希表 链接&#xff1a;存在重复元素 - 提交记录 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 题目样例 题目思路 C代…

提升水库大坝安全与效率:现代技术云平台的应用

在我国&#xff0c;水库大坝的数量居世界之首&#xff0c;它们在推动国民经济发展中扮演着不可或缺的角色。然而&#xff0c;要想让这些水利工程充分发挥其价值&#xff0c;不仅需要精准的调度与高效的管理&#xff0c;更重要的是要确保其安全无虞。一旦发生事故&#xff0c;后…

linux 使用 go 连接 etcd 集群时报错

问题分析 在 ubuntu 中使用 github.com/coreos/etcd/clientv3 第三方库报错&#xff0c;报错信息如下&#xff1a; # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint /root/go/pkg/mod/github.com/coreos/etcdv3.3.27incompatible/clientv3/balancer/resolver/…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(列表选择弹窗)

列表弹窗。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&#xff0c;参见UIContext说明。 从API version 10开始&#xff0…

HTML世界之标签Ⅵ

目录 一、progress 标签 二、q 标签 三、rp 标签 rt 标签 ruby 标签 四、s 标签 五、samp 标签 六、script 标签 七、section 标签 八、select 标签 九、small 标签 一、progress 标签 <progress> 标签定义运行中的任务进度&#xff08;进程&#xff09;。 …

数据结构——循环队列的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【回顾练习】静态路由配置综合实验报告

一、分析要求 为R6设备配置公有IP地址&#xff0c;并确保只能进行IP地址配置&#xff0c;无法进行其他配置。为R1-R5设备分配私有IP地址。为R1、R2、R4配置两个环回地址&#xff0c;为R5、R6配置一个环回地址。在R3上配置DHCP服务&#xff0c;以供两台PC自动获取IP地址。使用动…

数字电源浅析

电力电子技术是关于能量转换、调节、控制和管理等方面的学科,而数字电源则是电力电子技术的一种应用,是利用数字电路技术实现电源控制和管理的新型电源。 一、什么是数字电源 数字电源是一种数字控制的电源设备,可以通过数字控制芯片(DSP、MCU等)实现输出电压、电流、功…

向上生长

&#xff08;1&#xff09; 我记得2010年&#xff0c;在中国的苹果应用商店里&#xff0c;充斥的App还有很多&#xff1a;日历App、天气App、电池省电App、记事本App…。但这已经过去了2007-2008-2009三年&#xff0c;这些应用仍然很欢。 我有一个朋友算是中国最早一批开发iOS …

Transformer 论文阅读笔记

文章目录 前言论文阅读研究现状工作内容模型架构训练过程实验结果模型代码 其他评价 前言 Transformer可以说是深度学习领域最重要的&#xff0c;里程碑式的工作之一&#xff0c;发表于2017年的NIPS。该模型开创了自MLP&#xff08;多层感知机&#xff09;、CNN&#xff08;卷…

U盘插入电脑没有显示怎么办?

U盘可以备份/转移数据&#xff0c;还可以作为启动盘重装系统&#xff0c;但很多用户在使用u盘的时候&#xff0c;都遇到过这样的问题&#xff0c;就是u盘插入电脑没有反应&#xff0c;在电脑上找不到u盘设备。那么今天就跟大家等下U盘插入电脑没有显示怎么办。 原因/解决方法一…

html5cssjs代码 036 CSS默认值

html5&css&js代码 036 CSS默认值 一、代码二、解释 CSS默认值&#xff08;也称为浏览器默认样式&#xff09;是指当HTML元素没有应用任何外部CSS样式时&#xff0c;浏览器自动为这些元素赋予的一组基本样式。这些样式是由浏览器的默认样式表&#xff08;User Agent sty…

【最新测试函数】智能优化算法的CEC2022测试函数

(多种智能优化算法跑多次运行结果的最优值,平均值,标准差,最差值以及箱型图) 智能优化算法测试函数简介 智能优化算法测试函数是为了在优化算法研究和开发中测试算法性能的规范问题集合。这些测试函数模拟了真实世界优化问题的不同方面,包括局部最小值、最大值、全局最…

几种常用的用于视频读取、写入和处理的库和函数

在Python中&#xff0c;有几种常用的用于视频读取、写入和处理的库和函数。其中最流行的包括OpenCV、MoviePy和imageio。以下是这些包的简要介绍和示例用法&#xff1a; opencv OpenCV是一个广泛用于计算机视觉任务的开源库&#xff0c;它也可以用来处理视频。你可以使用cv2.…