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用的蛮好的,你去把他废弃了干什么,你文档不更新,应用起不来,你倒告诉我怎么解释,脸都不要了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值