【sharding-jdbc】引入shardingsphere导致MySQL自动生成主键报错问题

问题

  原项目中,数据库用的是单台数据库。现改成读写分离的两台数据库服务器。用的是shardingsphere。更新之后,项目中某个模块实体都是用MySQL自动生成策略的,ORM框架用的是tk-mybatis。报错异常如下:

ExecutorException: Error selecting key or setting result to parmeter object.Cuse: ParseCalcellationException...

原因分析

  代码实体类中,我是采用了

@Id
@KelSql(sql = "select uuid_short() from dual")
private String id;

在数据库读写分离分布式情况下,这种方式并不适用,需要做调整。

解决方法

  主键生成采用雪花算法,过程如下:

1.实现tk-mybaits的GenId

  雪花算法工具类用的是hutool的,生成雪花id时,需要根据实际情况考虑雪花算法可能会出现相同id的情况

public class TkGenerateUUID implements GenId {
    @Override
    public Object genId(String s, String s1) {
        Snowflake snowflake = IdUtil.createSnowflake(1, 1);
        return snowflake.nextStr();
    }
    
}
2.更改主键生成方式
@Id
@KeySql(genId = TkGenerateUUID.class)
private String id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值