Sharding-Jdbc集成mybatis-plus实现分库分表解决方案

项目地址:php

官方文档:html

1、运行测试

  • Step 1:新建两个数据库分别为seal_sharding、seal_sharding1
  • Step 2:分别导入db目录下sql文件
  • Step 3:打开项目,配置环境变量MYSQL_HOST、MYSQL_PORT以及用户名和密码
  • Step 4:运行测试文件(test包下)

2、租户ID的获取

修改config包下MybaitsPlusConfig.java,获取当前登陆用户的租户ID,这里默认写1
@Override
public Expression getTenantId() {
    try {
        // 获取当前登陆用户租户ID
        String tenantId = "1";
        if (!StrUtil.isEmpty(tenantId)) {
            return new LongValue(tenantId);
        }
        throw new Exception(RetBack.errorJson(4001, "该租户不存在"));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return new LongValue(-1L);
}

3、分库分表策略

  • 分库:根据表字段 租户ID(tenant_id) 模2(奇偶数)进行分库
  • 分表:根据表字段 id 去hascode模2(奇偶数)进行发分表,分布式主键采用雪花算法(SNOWFLAKE),详见:Sharding-JDBC

3、只分表不分库

本项目为两个数据源实现分库和分表,若是只分表不分库,只须要添加一个数据源便可java

4、实现注意点

  • Sharding-JDBC采用3.x版本
  • 须要复写MybaitsPlus配置
  • 排除自动数据源加载
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class, 
DataSourceAutoConfiguration.class})

附、Mybatis-Plus多数据源

若是不使用Sharding-JDBC,而须要多数据源,能够采用Mybaits-Plus多数据源方案,详见官方文档,后面我会把示例项目分享给你们,敬请期待。能够加我互相交流。git

<center style="font-size:18px">开源不易,且用且珍惜!</center>github



<center style="font-size:16px">赞助做者,互相交流</center>

算法

<div style="display:flex;justify-content:center;align-item:center">
<img src="https://user-gold-cdn.xitu.io/2020/5/29/1725e23e1228866e?w=1080&h=1080&f=png&s=342366" style="width:180px;height:180px;padding:20px"/>sql

<img src="https://user-gold-cdn.xitu.io/2020/5/29/1725e23e121cbaa2?w=300&h=299&f=gif&s=20783" style="width:180px;height:180px;padding:20px"/>
</div>数据库

转载请注明:个人技术分享 » Sharding-Jdbc集成mybatis-plus实现分库分表解决方案apache

相关文章
相关标签/搜索