美文网首页技术收藏-开发篇
ShardingSphere-JDBC使用简单笔记

ShardingSphere-JDBC使用简单笔记

作者: 追梦小蜗牛 | 来源:发表于2020-11-13 14:09 被阅读0次
    pexels-kauan-vargas-5829277.jpg

    介绍:

    Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
    ShardingSphere-JDBC:定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

    • 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。
    • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
    • 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。

    功能架构图:

    ShardingSphere-JDBC.png

    步骤:

    • 引入jar包:


      jar.png
    • mapper.xml:
      使用逻辑库和逻辑表名


      mapper.png
    • 配置属性
    server.port=9095
    
    mybatis.mapperLocations=classpath:mapper/*.xml
    
    # 数据库连接池配置变量
    initialSize=5
    minIdle=5
    maxIdle=100
    maxActive=20
    maxWait=60000
    timeBetweenEvictionRunsMillis=60000
    minEvictableIdleTimeMillis=300000
    
    ####################################
    # configuration of DataSource
    ####################################
    sharding.jdbc.datasource.names=ds0,ds1
    
    sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
    sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
    sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=GMT%2B8&useSSL=false
    sharding.jdbc.datasource.ds0.username=root
    sharding.jdbc.datasource.ds0.password=root
    # 初始连接数
    sharding.jdbc.datasource.ds0.initialSize=${initialSize}
    # 最小连接数
    sharding.jdbc.datasource.ds0.minIdle=${minIdle}
    # 最大连接池数量
    sharding.jdbc.datasource.ds0.maxActive=${maxActive}
    # 配置获取连接等待超时的时间
    sharding.jdbc.datasource.ds0.maxWait=${maxWait}
    # 用来检测连接是否有效的sql
    sharding.jdbc.datasource.ds0.validationQuery=SELECT 1 FROM DUAL
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    sharding.jdbc.datasource.ds0.timeBetweenEvictionRunsMillis=${timeBetweenEvictionRunsMillis}
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    sharding.jdbc.datasource.ds0.minEvictableIdleTimeMillis=${minEvictableIdleTimeMillis}
    
    sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
    sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
    sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=GMT%2B8&useSSL=false
    sharding.jdbc.datasource.ds1.username=root
    sharding.jdbc.datasource.ds1.password=root
    # 初始连接数
    sharding.jdbc.datasource.ds1.initialSize=${initialSize}
    # 最小连接数
    sharding.jdbc.datasource.ds1.minIdle=${minIdle}
    # 最大连接池数量
    sharding.jdbc.datasource.ds1.maxActive=${maxActive}
    # 配置获取连接等待超时的时间
    sharding.jdbc.datasource.ds1.maxWait=${maxWait}
    # 用来检测连接是否有效的sql
    sharding.jdbc.datasource.ds1.validationQuery=SELECT 1 FROM DUAL
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    sharding.jdbc.datasource.ds1.timeBetweenEvictionRunsMillis=${timeBetweenEvictionRunsMillis}
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    sharding.jdbc.datasource.ds1.minEvictableIdleTimeMillis=${minEvictableIdleTimeMillis}
    
    ####################################
    # 分库分表配置
    ####################################
    #actual-data-nodes:真实数据节点,由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式
    sharding.jdbc.config.sharding.tables.t_user.actual-data-nodes=ds${0..1}.t_user_${0..1}
    # 数据库分片列名称
    sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
    # 分库算法表达式(取模 , HASH , 分块等)
    sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds${user_id % 2}
    # 分表字段
    sharding.jdbc.config.sharding.tables.t_user.table-strategy.inline.sharding-column=user_id
    # 分表策略,这里不能跟分库策略一样,否则会导致有一半数据表没有机会插入数据
    sharding.jdbc.config.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user_${(user_id % 5) % 2}
    # 配置自动生成主键
    sharding.jdbc.config.sharding.tables.t_user.key-generator-column-name=user_id
    
    # 配置生成自增ID的雪花算法,单台服务器可以不配置
    spring.shardingsphere.sharding.tables.t_user.key-generator.column=user_id
    spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE
    spring.shardingsphere.sharding.tables.t_user.key-generator.props.worker.id=1
    spring.shardingsphere.sharding.tables.t_user.key-generator.props.max.tolerate.time.difference.milliseconds=0
    spring.shardingsphere.props.sql.show=true
    # open debug mode for mybatis,print SQL in console
    logging.level.org.rockyang.shardingjdbc.common.mapper=DEBUG
    logging.level.org.springframework=INFO
    mybatis.configuration.cache-enabled=false
    

    总结:

    上面这几步,已经可以测试、验证ShardingSphere-JDBC的插入数据、路由的功能了。service和dao层的代码,基本上不变。主要是引入对应的jar包和配置很多分表、分库的策略、主键生成策略...纵向、横向。
    代码地址:https://github.com/easy0526lion/demo-shardingsphere.git

    相关文章

      网友评论

        本文标题:ShardingSphere-JDBC使用简单笔记

        本文链接:https://www.haomeiwen.com/subject/dvbvbktx.html