分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(二)

说明:如果实现了docker部署mysql并完成主从复制的话再继续,本篇文章主要说明springboot配置实现Shardingjdbc进行读写分离操作。

如果没实现docker部署mysql实现主从架构的话点击我

Shardingjdbc配置介绍(版本:5.3.2)

application.yml配置设置连接池全局属性

cs 复制代码
spring:
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:qiyu-db-sharding.yaml
    hikari:
      pool-name: qiyu-user-pool
      minimum-idle: 15
      idle-timeout: 60000
      maximum-pool-size: 300
      connection-init-sql: select 1
      connection-timeout: 4000
      max-lifetime: 60000

shardingjdbc读写分离配置(qiyu-db-sharding.yaml)

cs 复制代码
dataSources:
  user_master: ##新表,重建的分表
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://192.168.1.128:8808/qiyu_live_user?useUnicode=true&characterEncoding=utf8
    username: root
    password: root

  user_slave0: ##新表,重建的分表
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://192.168.1.128:8809/qiyu_live_user?useUnicode=true&characterEncoding=utf8
    username: root
    password: root


rules:
    - !READWRITE_SPLITTING
      dataSources:
        #读写分离配置
        user_ds:
         staticStrategy:
           writeDataSourceName: user_master
           readDataSourceNames:
              - user_slave0
    - !SINGLE
    #  不分表分分库的默认数据源
      defaultDataSource: user_ds
    - !SHARDING
      tables:
        t_user:
          actualDataNodes: user_ds.t_user_${(0..04).collect(){it.toString().padLeft(2,'0')}}
          tableStrategy:
            standard:
              #指定用于分表的列名。
              shardingColumn: user_id
              shardingAlgorithmName: t_user-inline

      #定义分表算法
      shardingAlgorithms:
        t_user-inline:
          type: INLINE
          props:
            #根据"user_id"对5取模的结果将作为分表的后缀,范围为00到04,对应五个表,并在左侧填充0。
            algorithm-expression: t_user_${(user_id % 5).toString().padLeft(2,'0')}
props:
  sql-show: true

同时这个hikari的数据源有点小bug,加个配置类

java 复制代码
package com.laoyang.provider.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import javax.sql.DataSource;
import java.sql.Connection;

/**
 * @author:Kevin
 * @create: 2023-07-29 21:30
 * @Description:
 */
@Configuration
public class ShardingjdbcDatasourceAutoConnectionconfig {

    private static final Logger LOGGER = LoggerFactory.getLogger(ShardingjdbcDatasourceAutoConnectionconfig.class);

    @Bean
    public ApplicationRunner runner(DataSource dataSource) {
        return args -> {
            LOGGER.info("dataSource: {}",dataSource);
            //手动触发下连接池的连接创建
            Connection connection = dataSource.getConnection();
        };
    }
}

运行:出现下图说明配置成功。

相关推荐
chian-ocean4 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
Max_uuc16 分钟前
【架构心法】嵌入式系统的“防御性编程”:如何构建一个在灾难中存活的系统
架构
人鱼传说17 分钟前
docker desktop是一个好东西
运维·docker·容器
lbb 小魔仙21 分钟前
面向 NPU 的高性能矩阵乘法:CANN ops-nn 算子库架构与优化技术
线性代数·矩阵·架构
是码龙不是码农1 小时前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
云边有个稻草人1 小时前
CANN异构架构:以ops-nn为翼,驱动AIGC底层计算新突破
架构·aigc
心疼你的一切1 小时前
模态交响:CANN驱动的跨模态AIGC统一架构
数据仓库·深度学习·架构·aigc·cann
忆~遂愿1 小时前
CANN metadef 核心解析:计算图原型定义、算子元数据抽象与异构系统互操作机制
docker·容器
那个村的李富贵2 小时前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
晚霞的不甘2 小时前
CANN × ROS 2:为智能机器人打造实时 AI 推理底座
人工智能·神经网络·架构·机器人·开源