分库分表ShardingSphere-jdbc 5.5.2 + spring boot 配置

Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。

Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的标准和生态。 它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。 它站在数据库的上层视角,关注它们之间的协作多于数据库自身。

ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。

环境准备

版本

软件 版本
spring boot 3.4.5
shardingsphere-jdbc 5.5.2
druid 1.2.24
postgreSQL 17
JDK 21

功能

已实现配置功能:

  1. 单机模式服务;
  2. 数据源(druid加解密数据库密码);
  3. 规则配置:
    数据分片:多个分库分表键策略
    读写分离
    数据加密:SM4自定义算法
    单表
    算法:自定义雪花算法动态worker.id
    其他

待新增补充功能:
混合规则等。

数据库说明

本示例数据库为PostgreSQL,以一主二从作为集群架构演示,转为数据库架构时,可自定义修改配置。

集群

一主二从:
逻辑主库:ds_basic、ds0000、ds0001(ds_basic为数据简单、量少的元数据库)
逻辑从库:ds0000_slave1、ds0001_slave1、ds0000_slave2、ds0001_slave2
在这里插入图片描述

Maven依赖

         <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc</artifactId>
            <version>5.5.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.shardingsphere</groupId>
                    <artifactId>shardingsphere-test-util</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>2.2</version>
        </dependency>

配置

配置文件

在这里插入图片描述

spring boot配置

application.yml

spring:
  application:
    name: demo
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:sharding.yaml

shardingsphere-jdbc配置

完整的基础配置

sharding.yaml


mode:
  type: Standalone
  repository:
    type: JDBC
databaseName: aya_db
dataSources:
  ds_aya_basic:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_basic
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictableIdleTimeMillis: 600000
    timeBetweenEvictionRunsMillis: 300000
    testOnBorrow: true
    testWhileIdle: true
    filters: config, stat, wall
    connectProperties:
      connectTimeout: 5000
      socketTimeout: '20000'
      config.decrypt: 'true'
      config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ05kvOTSV2shvQ/nK632kXMe10o1fNcu+cA6TAYEh2bxhjnJ4DAoqooSpPhgjCGtzjpGhglrcMryq/olbDOOXMCAwEAAQ==

  ds_aya_0000:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_0000
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictableIdleTimeMillis: 600000
    timeBetweenEvictionRunsMillis: 300000
    testOnBorrow: true
    testWhileIdle: true
    filters: config, stat, wall
    connectProperties:
      connectTimeout: 5000
      socketTimeout: '20000'
      config.decrypt: 'true'
      config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ05kvOTSV2shvQ/nK632kXMe10o1fNcu+cA6TAYEh2bxhjnJ4DAoqooSpPhgjCGtzjpGhglrcMryq/olbDOOXMCAwEAAQ==

  ds_aya_0001:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_0001
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictableIdleTimeMillis: 600000
    timeBetweenEvictionRunsMillis: 300000
    testOnBorrow: true
    testWhileIdle: true
    filters: config, stat, wall
    connectProperties:
      connectTimeout: 5000
      socketTimeout: '20000'
      config.decrypt: 'true'
      config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ05kvOTSV2shvQ/nK632kXMe10o1fNcu+cA6TAYEh2bxhjnJ4DAoqooSpPhgjCGtzjpGhglrcMryq/olbDOOXMCAwEAAQ==

  ds_aya_0000_slave1:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_0000_slave1
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictableIdleTimeMillis: 600000
    timeBetweenEvictionRunsMillis: 300000
    testOnBorrow: true
    testWhileIdle: true
    filters: config, stat, wall
    connectProperties:
      connectTimeout: 5000
      socketTimeout: '20000'
      config.decrypt: 'true'
      config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ05kvOTSV2shvQ/nK632kXMe10o1fNcu+cA6TAYEh2bxhjnJ4DAoqooSpPhgjCGtzjpGhglrcMryq/olbDOOXMCAwEAAQ==

  ds_aya_0001_slave1:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_0001_slave1
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictableIdleTimeMillis: 600000
    timeBetweenEvictionRunsMillis: 300000
    testOnBorrow: true
    testWhileIdle: true
    filters: config, stat, wall
    connectProperties:
      connectTimeout: 5000
      socketTimeout: '20000'
      config.decrypt: 'true'
      config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ05kvOTSV2shvQ/nK632kXMe10o1fNcu+cA6TAYEh2bxhjnJ4DAoqooSpPhgjCGtzjpGhglrcMryq/olbDOOXMCAwEAAQ==

  ds_aya_0000_slave2:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_0000_slave2
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictableIdleTimeMillis: 600000
    timeBetweenEvictionRunsMillis: 300000
    testOnBorrow: true
    testWhileIdle: true
    filters: config, stat, wall
    connectProperties:
      connectTimeout: 5000
      socketTimeout: '20000'
      config.decrypt: 'true'
      config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ05kvOTSV2shvQ/nK632kXMe10o1fNcu+cA6TAYEh2bxhjnJ4DAoqooSpPhgjCGtzjpGhglrcMryq/olbDOOXMCAwEAAQ==

  ds_aya_0001_slave2:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5433/aya_0001_slave2
    username: postgres
    password: iDtU7OG+pSIRUKZR4oHIqg4ApomOt8NhPafBHJ9i9WZMKnsoLR3oj19M8CvRnNVzZGqy4S8iVFQQ/xDyaBeK6w==
    initialSize: 1
    minIdle: 1
    maxActive: 64
    maxWait: 20000
    validationQuery: SELECT 1
    validationQueryTimeout: 30000
    minEvictableIdleTimeMillis: 300000
    maxEvictable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值