当前位置: 首页 > article >正文

Spring Boot + ShardingSphere 踩坑记

最近在准备秋招,偷了个轮子项目之后想改个分表,于是有了这篇文章。

省流:请使用shardingsphere-jdbc 5.5.2,并根据官方5.5.2版本文档进行配置,不要使用starter。此外,如果希望使用INTERVAL分片算法,请在插入数据前将对应的字段(如create_time)手动进行赋值,否则会报错。

完整配置:

# sharding.yml
dataSources:
  ds0:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: <your_datasrouce_url>
    username: <your_user_name>
    password: <your_password>

rules:
  - !SINGLE
    tables:
      - "*.*"
  - !SHARDING
    tables:
      data:
        actualDataNodes: ds0.data_${2024..2025}
        tableStrategy:
          standard:
            shardingColumn: create_time
            shardingAlgorithmName: create_time_interval
        keyGenerateStrategy:
          column: id
          keyGeneratorName: snowflake

    shardingAlgorithms:
      create_time_interval:
        type: INTERVAL
        props:
          datetime-pattern: "yyyy-MM-dd HH:mm:ss"
          datetime-lower: '2024-01-01 00:00:00'
          sharding-suffix-pattern: "yyyy"
          datetime-interval-amount: 1
          datetime-interval-unit: YEARS

    keyGenerators:
      snowflake:
        type: SNOWFLAKE

props:
  sql-show: true
# application.yml
spring:
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:sharding.yml

我很少用来形容一个东西,上一个能被我如此评价的是微信小程序,现在又多了一个ShardingSphere。

最史的东西莫过于官方文档。很难想象在5202年的今天,一个Apache顶级项目的文档能够如此糟糕——哪怕是微信小程序在经过更新后,如今的文档已经勉强够看了,而在我看来ShardingSphere的文档甚至连更新前的微信小程序文档都远远不如,以至于我浪费了整整两天时间在毫无意义的试错与改配置上。

目前网上的大多数材料都是基于starter的,并且LLM给出的配置也大多基于starter,但是只要从官方网站点进官方文档,里面根本找不到配置starter的说明,只有人为地在搜索引擎里把ShardingSphere和Spring Boot一起搜索,才会找到一个有Spring Boot Starter配置的文档——而当你从官方的文档库里点进这个版本的文档,Spring Boot Starter这一项又会神秘消失。

按照好不容易找到的starter配置说明改好,点击启动后又会被各种莫名其妙的错误折磨,我遇到的包括但不限于提示内存泄漏启动不了、Hikari连接超时、明明配置了但框架拿到的属性值为null等。

于是开始考虑对starter进行降级,从被官方雪藏的v4.x的文档里翻出starter的配置说明并辛辛苦苦改好后,又遇到了各种莫名其妙的错误导致业务逻辑跑不通。

之后去Github上翻Issue,维护者直接告诉你starter不维护了,反手把Issue关了。

然后根据开发者的建议换成jdbc方式,发现按照官方文档给的JDBC启动流程根本跑不起来。当然并不是所有版本都是这样——只不过我恰好用的是跑不起来的版本。

之后我无计可施,只能挨个尝试不同版本——索性我是幸运的,用之前starter的版本试了两三次之后换上最新版就好了。

这个过程中,有些版本能用搜索引擎搜出来Spring Boot的配置方法,有些版本搜不出来。但你别想着大版本号下的配置格式是一致的——因为哪怕只是一个小版本的更新,配置格式都需要跟着一起修改,简直让人匪夷所思,更别提数据源的名称一会儿是url,一会儿又变成jdbc_url,我完全搞不懂这个名称有什么升级的意义。

务实一点,我劝你们,把文档,版本号的这个理念先搞懂。starter用的蛮好的,你去把他废弃了干什么,你文档不更新,应用起不来,你倒告诉我怎么解释,脸都不要了。


http://www.kler.cn/a/544053.html

相关文章:

  • 集合家族详情
  • 详解 JavaScript 中 fetch 方法
  • Visual Studio 进行单元测试【入门】
  • React 什么时候会触发重新渲染?
  • 【R语言】相关系数
  • ffmpeg -demuxers
  • 华为云函数计算FunctionGraph部署ollma+deepseek
  • Java进阶阶段的学习要点
  • 联想电脑如何进入BIOS?
  • 汽车ADAS
  • Python基于Django的微博热搜、微博舆论可视化系统(V3.0)【附源码】
  • Ansible的主机清单
  • c/c++蓝桥杯经典编程题100道(21)背包问题
  • 【网络安全】常见网络协议
  • 【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞
  • JAVA安全—Shiro反序列化DNS利用链CC利用链AES动态调试
  • 23页PDF | 国标《GB/T 44109-2024 信息技术 大数据 数据治理实施指南 》发布
  • ASP.NET Core SignalR的协议协商
  • 在vivado中对数据进行延时,时序对齐问题上的理清
  • Web应用项目开发 ——Spring Boot邮件发送
  • 游戏引擎学习第100天
  • 【狂热算法篇】并查集:探秘图论中的 “连通神器”,解锁动态连通性的神秘力量(通俗易懂版)
  • esxi添加内存条因为资源不足虚拟机无法开机——避坑
  • 尚硅谷爬虫note002
  • Android Studio 打包App问题
  • 深入理解 Scoped CSS 的限制及其穿透方法