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

Spring Boot + ShardingSphere 踩坑记

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

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

完整配置:

# sharding.yml
dataSources:ds0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: <your_datasrouce_url>username: <your_user_name>password: <your_password>rules:- !SINGLEtables:- "*.*"- !SHARDINGtables:data:actualDataNodes: ds0.data_${2024..2025}tableStrategy:standard:shardingColumn: create_timeshardingAlgorithmName: create_time_intervalkeyGenerateStrategy:column: idkeyGeneratorName: snowflakeshardingAlgorithms:create_time_interval:type: INTERVALprops:datetime-pattern: "yyyy-MM-dd HH:mm:ss"datetime-lower: '2024-01-01 00:00:00'sharding-suffix-pattern: "yyyy"datetime-interval-amount: 1datetime-interval-unit: YEARSkeyGenerators:snowflake:type: SNOWFLAKEprops:sql-show: true
# application.yml
spring:datasource:driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriverurl: 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.mrgr.cn/news/90577.html

相关文章:

  • 云原生AI Agent应用安全防护方案最佳实践(上)
  • DeepSeek能做分析吗?从需求规约到分析类图的实验
  • 【DuodooBMS】给PDF附件加“受控”水印的完整Python实现
  • STM32 RTC 实时时钟说明
  • [LeetCode]day21 15.三数之和
  • 深入解析 STM32 GPIO:结构、配置与应用实践
  • 前缀树算法篇:前缀信息的巧妙获取
  • 动态规划LeetCode-416.分割等和子集
  • 动态规划LeetCode-1049.最后一块石头的重量Ⅱ
  • 计算机网络和操作系统常见面试题目(带脑图,做了延伸以防面试官深入提问)
  • 小白零基础如何搭建CNN
  • UGUI Canvas为Overlay模式下的UI元素的position和localPosition
  • 【Matlab算法】基于人工势场的多机器人协同运动与避障算法研究(附MATLAB完整代码)
  • C++病毒(^_^|)(2)
  • 变化检测相关论文可读list
  • 位运算算法篇:异或运算
  • 2、k8s 二进制安装(详细)
  • Ubuntu 22.04 - OpenLDAP安装使用(服务器+LAM+客户端)
  • Golang学习历程【第七篇 闭包type defer panic recover了解time包】
  • 【Unity3D】Jenkins Pipeline流水线自动构建Apk
  • Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
  • Nginx 中的HTTP2
  • hbase快照同步到目标集群出现ERROR Multiple regions have the same startkey问题分析
  • 【Qt 常用控件】多元素控件(QListWidget、QTableWidgt、QTreeWidget)
  • React使用 useImperativeHandle 自定义暴露给父组件的实例方法(包括依赖)
  • Java 大视界 -- 人工智能驱动下 Java 大数据的技术革新与应用突破(83)