【经验总结】ShardingSphere+Springboot-01模式参数配置

news2024/12/26 22:01:42

文章目录

  • 详细配置(boot)
    • 一、模式配置&数据源配置
      • 1.1 模式配置
      • 1.2 数据源配置
      • 1.3 默认数据源的配置
        • 默认数据源配置结论
    • 二、基础属性配置
      • 2.1 在日志中打印 SQL
      • 2.2 在程序启动和更新时,是否检查分片元数据的结构一致性

详细配置(boot)

一、模式配置&数据源配置

1.1 模式配置

官方推荐开发环境使用单机模式,正式部署环境推荐使用zookepper(结合官方文档尝试)

相关参考

  • ZooKeeper 注册中心安装与使用
  • 持久化仓库类型的详情,请参见内置持久化仓库类型列表。

单机模式的配置如下

spring:
  shardingsphere:
    mode:
      type: Standalone
      repository:
        type: JDBC

1.2 数据源配置

数据源的配置详细可以看上面的快速开始和官方文档,这里梳理一下数据源配置需要注意的点

  • 本文示例的数据是postgresql数据库,官方文档是mysql,具体需要根据实际场景配置
  • 配置真实数据源时可以使用groovy语法,写法类似ds${0...10}来快速声明多个数据源
  • IDE编辑器可能会无法识别数据源的配置信息。
  • 注意根据项目实际使用的数据库连接池来配置(springboot内置的是hikariCP连接池,如果需要使用duird需要进行额外的配置,可以参考文章https://www.cnblogs.com/architectforest/p/13531448.html

数据源参考示例

spring:
  shardingsphere:
    mode:
      type: Standalone
      repository:
        type: JDBC
    props:
      # 禁用执行SQL用于获取表元数据
      sql-show: true
      # 禁用执行SQL用于获取数据库元数据
#      check-table-metadata-enabled: false
    datasource:
      # 配置真实数据源 相当于ds0,ds1
      names: ds0,ds1
      ds0:
        # 数据库连接池全类名
        type: com.zaxxer.hikari.HikariDataSource
        # 数据库驱动类名,以数据库连接池自身配置为准
        driver-class-name: org.postgresql.Driver
        # 数据库 URL 连接,以数据库连接池自身配置为准
        jdbc-url: jdbc:postgresql://localhost:5432/sd0
        username: postgres
        password: root
      ds1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: org.postgresql.Driver
        jdbc-url: jdbc:postgresql://localhost:5432/sd1
        username: postgres
        password: root

1.3 默认数据源的配置

在实际业务场景中,比较常见的场景是一个库中100张表只有2张表要分库分表,而其余的表则继续访问默认数据源;在5.0.0之前的版本官方支持直接配置默认数据源,目前并没有找到对应的配置说明, 自己尝试解决。

  • 准备一个damain的库,创建一张表tb_class

**测试一:**不配置该表的策略,配置一个数据源defaultds,该数据源汇总有tb_class表,观察默认情况下ss选择那个数据源。

配置数据源如下

   #... 
    datasource:
      names: ds${0..1},defaultds
      ds0:
        # ...
      defaultds:
        # ...
      ds1:
        # ...

测试结果

  • ss自动指定了defaultds作为tb_class表指定的库。

  • 疑问:如果配置了多个库且都有同一个表tb_class,ss会指定哪个库作为默认库?

测试二:不配置改变测试,再配置一个数据源,里面也有该表tb_class。观察该情况下ss选择那个数据源。

配置数据源如下

   #... 
    datasource:
      names: ds${0..1},defaultds,defaultds2
      ds0:
        # ...
      defaultds:
        # ...
        
      defaultds2:
        # ...
      ds1:
        # ...

测试结果

  • ss依然自动指定了defaultds作为tb_class表指定的库。
  • 调换顺序配置改为ds${0..1},defaultds2,defaultds,ss则会指定了defaultds2作为tb_class表指定的库。
  • 初步得出结论:ss会依据数据源声明的顺序,指定没有配置策略的表的数据源

测试三:验证结论。在ds0数据源中也创建一个tb_class表,数据源声明顺序不变,即ds${0..1},defaultds,defaultds2。如果tb_class表是调用ds0数据源,则说明结论正确。

测试结果:符合预期

默认数据源配置结论
  • ss会自动识别没有分库分表的表格。在官方FAQ中也有提到
  • 而且是根据数据源的声明先后顺序实现,因此在实际配置过程中,只需要将默认数据源配置在第一个即可,比如name: defaultds,ds${0..10}

image-20240807115105199

二、基础属性配置

Apache ShardingSphere 提供属性配置的方式配置系统级配置。官方文档:https://shardingsphere.apache.org/document/5.2.1/cn/user-manual/common-config/props/

常用的几个配置:

    props:
      # 开启打印SQL
      sql-show: true
      # 简化打印SQL语句
      sql-simple: true
      # 禁用执行SQL用于获取数据库元数据
      check-table-metadata-enabled: true

2.1 在日志中打印 SQL

打印 SQL 可以帮助开发者快速定位系统问题。日志内容包含:逻辑 SQL,真实 SQL 和 SQL 解析结果。

配置参数包含

  • sql-show开启后会打印SQL
  • sql-simple,简化了真实SQL的输出,根据实际情况可以选择是否开启,差别如下

image-20240807115929064

2.2 在程序启动和更新时,是否检查分片元数据的结构一致性

也是一个常用的功能,让服务启动时会检查每个分片的数据/表结构是否一致,建议开启,可以解决一些潜在的bug

  • 当检查到异常时,服务会抛出InconsistentShardingTableMetaDataException(分片不一致异常)

    image-20240807144402148

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

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

相关文章

JavaScript高阶笔记总结第三天:(JavaScript高阶完结)

Xmind鸟瞰图: 简单文字总结: js高阶笔记总结: 严格模式: 1.开启严格模式:"use strict" 2.不使用var关键字声明会报错 3.严格模式下普通函数的this指向undefined 高阶函数: 满足…

浅谈C/C++指针和引用在Linux和Windows不同环境下的编码风格

目录 0. 前言 1. 代码块、函数体上的 { } 的规范 2. 指针和引用中的 * 和 & 符号的位置 1. Linux 环境下编码风格(gcc) 2. Windows 环境下编码风格(Visual Studio) 3. 简单总结 0. 前言 C/C因为高度的自由性,并没有对一些常见的编码风格进行限制&#…

https://registry.nlark.com/无法访问

先上问题: own up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOU…

电动自行车出海黑马Avento独立站拆解(上)丨出海笔记

这次我们来拆解一个电动自行车的独立站 为什么选电动自行车? 因为全球疫情,带来出行问题——避免聚集,大家都减少了公共交通工具,而改为自行车,电动自行车...... 君不见疫情之后无论是出行自行车,还是健…

NMAP扫描器的使用

NMAP 一 概述 nmap是一个网络探测和安全扫描工具,系统管理者和个人可以使用这个软件扫描大型的网络,获取 哪台主机正在运行以及提供什么服务等信息。 nmap可用于 检测活在网络上的主机(主机发现)。 检测主机上开放的端口(端口发现)。 检测到相应的端口(服务发现…

cisp-pte考试复盘

考试客户端下载-->点击进入考试>输入密码->进去可以看见一个qax的登录框【监考员会告知账户密码】->进入考试页面 里面的操作题,点击开始答题,能看见一个题有一个攻击机,这时我们需要点击鼠标左键,看见一个控制台,点击控制台才能进入答题【双击是没有用的】 …

C/C++开发,opencv内置背景减除算法与运动检测

目录 一、c opencv 背景减除算法内置算法 1.1 MOG2算法 1.2 KNN算法 二、完整案例实现 2.1 程序代码 2.2 程序编译及输出 一、c opencv 背景减除算法内置算法 背景减除算法的目标是将视频帧中的背景与前景(通常是移动的对象)分离。OpenCV提供MOG2&…

数据结构-排序的概念、应用及其算法实现1(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序)

本篇文章主要讲解直接插入排序、希尔排序、选择排序、堆排序、冒泡排序算法实现以及时间复杂度,稳定性分析。将在接下来的文章讲解快速排序、归并排序和计数排序。 本文全部代码在文章最后 目录 一、常见的排序算法 a.排序实现的接口 1.1插入排序 1.1.1基本思想…

【C++】BFS解决边权唯一的最短路径问题

目录 介绍 迷宫中离入口最近的出口 算法思路 代码实现 最小基因变化 算法思路 代码实现 单词接龙 算法思路 代码实现 为高尔夫比赛砍树 算法思路 代码实现 介绍 最短路问题是图论中非常经典的一种问题,其实就是通过代码找到两点之间的最优路径(往往是距离最短),最…

用MobaXterm,TightVNC和secure SSH实现两台windows电脑之间的连接和通信

今天给大家分享一个非常有趣的技术,那便是如何使用MobaXterm来实现两台电脑之间的通信。实验成功,保证能跑。 首先,给大家介绍我们今天最重要的工具:那便是MobaXterm(以下由ChatGPT生成): Moba…

C++初阶_2: inline内联函数 宏函数

C推出了inline关键字,其目的是为了替代C语言中的宏函数。 我们先来回顾宏函数: 宏函数 现有个需求:要求你写一个Add(x,y)的宏函数。 正确的写法有一种,错误的写法倒是五花八门,我们先来“见不贤而自省也。” // …

我怎么会这么依赖 GUI?

AWS CLI、.NET 和 Lambda 函数 欢迎来到雲闪世界。在 Windows 上使用 Visual Studio 和 AWS Explorer 绝对会让你变得懒惰。我的意思是,能够通过右键单击项目来构建和部署 Lambda 函数之类的东西真是太棒了,但有时最好了解幕后发生了什么。 尽管如此&am…

Java - 异常

异常处理: ①捕获异常 选中代码后ctrlAltt: try catch捕捉异常 ②抛出异常 加上throws 异常类型 自定义异常 Exception.java: package Exception;//自定义运行时异常 public class ExceptionTest {public static void main(String[] args) {//保存一个合法的年…

知识库管理软件购买指南:2024年十大选择

本篇文章介绍了以下工具:PingCode、Worktile、蓝湖、语雀、幕布、Guru、Helpjuice、Stack Overflow for Teams、KnowledgeOwl、eXo Platform。 在企业中,信息分散、难以获取是个常见的痛点。无论是新员工入职、团队协作,还是项目管理&#xf…

电脑高手必备!这款数据恢复神器你值得拥有

哎呀,现在我们天天在用的手机、电脑和各种移动设备都是有很多日常和工作中的重要数据,丢失重要的文件和数据的时候就很着急,所以我也很感同身受,为此困扰过我好几次,所以今天特地借此文章整理了常用的失易得数据恢复软…

Unity游戏开发002

Unity游戏开发002 目录 第一章:Hello,Unity!第二章:创建一个游戏体 本文目录 Unity游戏开发 Unity游戏开发002目录本文目录前言一、创建一个游戏体1. 编辑器语言设置2. 创建游戏对象的两种方法3. 快速复制和粘贴物体4. 注意事项…

/springmvc/xxx.html和/springmvc/xxx的区别

起因: 今天在访问webapp目录下的html文件时,突然报了500错误(如下图),让我检查视图解析器,我寻思我访问的是静态资源,不是直接交给servlet处理嘛?需要什么视图解析器?&a…

13.C基础_预处理

预处理语句就是以#开头的语句。这些语句类型如下: #include:包含头文件#define:宏定义#undef:取消宏定义#ifdef,#endif:成对使用,判断是否定义了某个宏 宏定义 宏定义的本质就是原样替换&…

【Material-UI】Floating Action Button (FAB) 详解:动画效果 (Animation)

文章目录 一、FAB 按钮的动画概述1. 默认动画效果2. 多屏幕横向切换时的动画 二、FAB 动画效果的实现1. 代码示例:跨标签页的 FAB 动画2. 代码解析3. 多个 FAB 的切换 三、动画效果的最佳实践四、总结 在现代网页设计中,动画不仅提升了用户界面的动态感&…

React+AntDesign做一个日历,展示节假日,节气,并且在某几个时间上添加活动备注

直接贴效果图😄 首先日历是用的AntDesign提供的Calendar组件,这个组件还是蛮强大的,可以自定义头部时间下拉;渲染每个时间段,或者重置时间段内容,玩的空间是很大的 直接贴代码,结尾最后我会将开发中遇到的问题贴出来解答一下 第一步:下载js-calendar-converter添加…