当前位置: 首页 > news >正文

MySQL主从架构配合ShardingJdbc实现读写分离

文章目录

  • 目录
    • 架构搭建
    • 读写分离
      • pom.xml
      • fdy-live-user-provider 模块
        • application.yml
        • fdy-db-sharding.yaml
        • ShardingJdbcDatasourceAutoInitConnectionConfig.java

目录

架构搭建

基于Docker去创建MySQL的主从架构

读写分离

pom.xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${fdy-mysql.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core</artifactId>
    <version>${sharding.jdbc.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>${snakeyaml.version}</version>
</dependency>

fdy-live-user-provider 模块

application.yml
spring:
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:fdy-db-sharding.yaml
    # 设置连接池的全局属性
    hikari:
      pool-name: fdy-user-pool
      minimum-idle: 15 # 初始化连接池
      maximum-pool-size: 300
      connection-init-sql: select 1
      connection-timeout: 4000
      max-lifetime: 60000

logging:
  level:
    org.apache.shardingsphere: DEBUG
    com.zaxxer.hikari: DEBUG
fdy-db-sharding.yaml
dataSources:
  user_master: ##新表,重建的分表
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver  # 统一为 driverClassName
    jdbcUrl: jdbc:mysql://192.168.56.101:8808/fdy_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  # 统一为 driverClassName
    jdbcUrl: jdbc:mysql://192.168.56.101:8809/fdy_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
ShardingJdbcDatasourceAutoInitConnectionConfig.java

java\org\fdy\live\user\provider\config\ShardingJdbcDatasourceAutoInitConnectionConfig

package org.fdy.live.user.provider.config;

import lombok.extern.slf4j.Slf4j;
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 lee
 * @description 解决hikari存在bug, 强制hikari进行数据源的初始化操作
 */
@Slf4j
@Configuration
public class ShardingJdbcDatasourceAutoInitConnectionConfig {

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

相关文章:

  • uniapp项目运行失败Error: getaddrinfo *.bspapp.com 文件查找失败uview-ui及推荐MarkDown软件 Typora
  • PyTorch全精度训练和混合精度训练简单对比:全精度训练一定比混合精度训练更准确吗?
  • 详解linux中的fork函数
  • 探索AIGC未来:通义万相2.1与蓝耘智算平台的完美结合释放AI生产力
  • 2024爱分析·央国企数字化应用实践报告
  • taosd 写入与查询场景下压缩解压及加密解密的 CPU 占用分析
  • ORACLE导入导出
  • 【网络协议详解】——isis技术(学习笔记)
  • 搭建BOA服务器
  • Note 12 R pro (MIUI 14.0.10) magisk方式 获取root教程
  • protobuf、protoc、proto这3个什么关系
  • springboot012基于springboot的社区团购系统设计与实现(源码+包运行+LW+技术指导)
  • TensorFlow的pb模型
  • AcWing 5539. 牛奶交换 整体思维+破环成链思想
  • IO多路复用(epoll)/数据库(sqlite)
  • cocos creator 混合模式编辑器与运行不一致的问题
  • TypeError: JSON.stringify cannot serialize cyclic structures
  • anolis8.9-k8s1.32-node-二进制部署
  • FreeRTOS第15篇:FreeRTOS链表实现细节03_List_t与ListItem_t的奥秘
  • Python程序的「加密」:Cython编译
  • 用织梦系统做的2个网站要把它都上传到服务器上吗/seo自动点击排名
  • 网站视差怎么做/网站推广软件下载
  • 企业公示信息查询系统广西/seo网络培训机构
  • 目前做系统比较好的网站/代做百度关键词排名
  • 重庆网站建设哪家专业/网店运营是做什么的
  • 任经理 徐州网站建设/深圳网络营销网站设计