Spring Boot интегрирует сегментирование jdbc для реализации разделения таблиц базы данных MySQL

Шардинг jdbc на самом деле слишком прост. Некоторое время назад бизнес моей компании нуждался в использовании этого инструмента для создания подтаблиц. Я изучил его сам и закончил его за долгое время.

Перейдем сразу к коду, он слишком простой и вводить нечего, в конфигурации есть комментарии.

зависимости maven:

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.1</version>
        </dependency>

Свойства двух таблиц:

CREATE TABLE `test_sharding0` (
  `sharding_id` varchar(255) NOT NULL,
  `sharding_name` varchar(255) NOT NULL,
  `sharding_age` varchar(255) NOT NULL,
  PRIMARY KEY (`sharding_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `test_sharding1` (
  `sharding_id` varchar(255) NOT NULL,
  `sharding_name` varchar(255) NOT NULL,
  `sharding_age` varchar(255) NOT NULL,
  PRIMARY KEY (`sharding_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 Конфигурация application.properties:

#------------------------基本配置
# 应用名称
spring.application.name=sharding-jdbc-demo
# 开发环境设置
spring.profiles.active=dev
# 内存模式
spring.shardingsphere.mode.type=Memory
# 打印SQl
spring.shardingsphere.props.sql-show=true

#------------------------数据源配置
# 配置真实数据源
spring.shardingsphere.datasource.names=server-bug

# 配置数据源
spring.shardingsphere.datasource.server-bug.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.server-bug.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.server-bug.jdbc-url=jdbc:mysql://ip:端口/数据库名称?rewriteBatchedStatements=true
spring.shardingsphere.datasource.server-bug.username=用户名
spring.shardingsphere.datasource.server-bug.password=密码

#------------------------标准分片表配置(数据节点配置)
# 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持 inline 表达式。
# server-bug0.test_sharding0,server-bug0.test_sharding1,server-bug1.test_sharding0,server-bug1.test_sharding1
spring.shardingsphere.rules.sharding.tables.test_sharding.actual-data-nodes=server-bug.test_sharding$->{0..1}
#spring.shardingsphere.rules.sharding.tables.test_sharding.actual-data-nodes=server-bug.test_sharding0,server-bug.test_sharding1

#------------------------分表策略
# 用于单分片键的标准分片场景
# 分片列名称
spring.shardingsphere.rules.sharding.tables.test_sharding.table-strategy.standard.sharding-column=sharding_id
# 分片算法名称
spring.shardingsphere.rules.sharding.tables.test_sharding.table-strategy.standard.sharding-algorithm-name=alg_hash_mod

#------------------------分片算法配置
# 哈希取模分片算法
# 分片算法类型,有好几种算法的,百度一下一大堆,HASH_MOD这种是通过哈希取模
spring.shardingsphere.rules.sharding.sharding-algorithms.alg_hash_mod.type=HASH_MOD
# 分片算法属性配置
spring.shardingsphere.rules.sharding.sharding-algorithms.alg_hash_mod.props.sharding-count=2

#------------------------分布式序列策略配置
# 分布式序列列名称
spring.shardingsphere.rules.sharding.tables.test_sharding.key-generate-strategy.column=sharding_id
# 分布式序列算法名称
spring.shardingsphere.rules.sharding.tables.test_sharding.key-generate-strategy.key-generator-name=alg_snowflake

#------------------------分布式序列算法配置
# 分布式序列算法--推荐使用雪花算法,这个可以代替@TableId注解
spring.shardingsphere.rules.sharding.key-generators.alg_snowflake.type=SNOWFLAKE


Все остальные коды можно читать и записывать нормально (здесь используется mybatis plus, если не использовать, то будет то же самое):

    @GetMapping("/addTestSharding")
    public void addTestSharding(){
        for(int i=0; i<10; i++){
            TestSharding testSharding = new TestSharding();
            testSharding.setShardingName("小明"+i);
            testSharding.setShardingAge("年龄"+i);
            testShardingService.save(testSharding);
        }
    }

Это всего лишь тест двух таблиц.Если таблиц больше,можно записать их в отдельные файлы,или записать непосредственно в Java-класс.Также можно записать в базу данных.Можно просто прочитать их при загрузке Файл конфигурации.

Наконец, посмотрите на эффект:

 Сделайте это и закончите, это так просто!

 

рекомендация

отblog.csdn.net/xiaobug_zs/article/details/130588851
рекомендация