Java基于ShardingSphere实现分库分表的实例详解

 更新时间:2022年03月15日 09:46:15   作者:程序员云帆哥  
ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目, 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景,对ShardingSphere分库分表相关知识感兴趣的朋友一起看看吧

一、简介

  Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

  Apache ShardingSphere 旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 关系型数据库当今依然占有巨大市场份额,是企业核心系统的基石,未来也难于撼动,我们更加注重在原有基础上提供增量,而非颠覆。

  Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。

  ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。

二、项目使用

1、引入依赖

<dependency>
   <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC2</version>
</dependency>

2、数据库

3、实体类

@Data
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

4、mapper

这里用的Mybatis-plus 3.4版本。

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

5、yml配置

spring:
  shardingsphere:
    datasource:
      #数据库分库名
      names: ds0,ds1
      ds0:
        #type为数据源,如果是Druid数据库连接池,可以去改
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/test0?characterEncoding=utf-8&serverTimezone=UTC
        username: root
        password: root
      ds1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/test1?characterEncoding=utf-8&serverTimezone=UTC
        username: root
        password: root
    # 分片规则
    sharding:
      default-database-strategy:
        inline:
          algorithm-expression: ds$->{id%2}
          sharding-column: id
      tables:
        user:
          actual-data-nodes: ds${0..1}.user_${0..2}
          table-strategy:
            inline:
              algorithm-expression: user_${age%2}
              sharding-column: age
    # 在日志中SQL语句
    props:
      sql:
        show: true

6、测试类

@SpringBootTest
class DemoApplicationTests {
    @Resource
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        User user = new User();
        user.setId(1);
        user.setName("666");
        user.setAge(16);
        userMapper.insert(user);
    }

	@Test
    void contextLoads2() {
        User user = new User();
        user.setId(2);
        user.setName("666");
        user.setAge(17);
        userMapper.insert(user);
    }
}

7、数据

到此这篇关于ShardingSphere实现分库分表的文章就介绍到这了,更多相关ShardingSphere分库分表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringSecurity oAuth2.0的四种模式(小结)

    SpringSecurity oAuth2.0的四种模式(小结)

    本文主要介绍了SpringSecurity oAuth2.0的四种模式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 结合线程池实现apache kafka消费者组的误区及解决方法

    结合线程池实现apache kafka消费者组的误区及解决方法

    这篇文章主要介绍了结合线程池实现apache kafka消费者组的误区及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Java中重载与重写的对比与区别

    Java中重载与重写的对比与区别

    这篇文章主要介绍了Java中重载与重写的对比与区别的相关资料,需要的朋友可以参考下
    2017-03-03
  • maven中心仓库OSSRH使用简介(推荐)

    maven中心仓库OSSRH使用简介(推荐)

    这篇文章主要介绍了maven中心仓库OSSRH使用简介,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java多线程定时器Timer原理及实现

    Java多线程定时器Timer原理及实现

    这篇文章主要介绍了Java多线程定时器Timer原理及实现,涉及Timer的schedule的使用,定时器Timer的schedule等相关内容以及代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • springmvc后台基于@ModelAttribute获取表单提交的数据

    springmvc后台基于@ModelAttribute获取表单提交的数据

    这篇文章主要介绍了springmvc后台基于@ModelAttribute获取表单提交的数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java读取properties配置文件的方法

    java读取properties配置文件的方法

    这篇文章主要介绍了java读取properties配置文件的方法,涉及java操作properties配置文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 基于opencv+java实现简单图形识别程序

    基于opencv+java实现简单图形识别程序

    这篇文章主要给大家介绍了如何基于opencv+java实现简单图形识别程序的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • 详解SpringMVC注解@initbinder解决类型转换问题

    详解SpringMVC注解@initbinder解决类型转换问题

    本篇文章主要介绍了详解SpringMVC注解@initbinder解决类型转换问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 浅谈Java BitSet使用场景和代码示例

    浅谈Java BitSet使用场景和代码示例

    这篇文章主要介绍了浅谈Java BitSet使用场景和代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论