Sharding-JDBC 实现读写分离

一、Sharding-JDBC介绍:

Sharding-JDBC是一种轻量级的JAVA框架,在Java的JDBC层提供额外的服务。它使用客户端直连数据库,以jar包的形式提供服务,无需额外的部署和依赖,可以看作增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
作用:
1.实现数据库的数据分离
2.实现分库分表

二、配置项目:

实现Sharding-JDBC需要导入的依赖:

<dependency>
    <groupId>org.apache.shardingspheregroupId>
    <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    <version>4.0.0-RC1version>
dependency>

idea中application.yml文件需要配置的:

server:
  port: 8080
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID
#   192.168.***.**1  主   192.168.***.**2 从   root/root
spring:
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.***.**1:3306/数据库名?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: ******
        use-ping-method: false
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.***.**2:3306/数据库名?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: ******
        use-ping-method: false #有个ERROR报错为Discard long time none received connection.但是主从切换进程切换时还是会报这个错误,我还没解决,但不影响项目运行。
    masterslave:
      # 配置读写分离的方式
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个从库之间使用逗号进行分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
#SpringBootConfiguration.class和DruidDataSourceAutoConfigure.class两个配置类中都含有创建DataSource数据源对象会导致冲突
  main:
      allow-bean-definition-overriding: true #true允许并定义覆盖

项目运行成功会生成两个DataSource数据源对象
Sharding-JDBC 实现读写分离_第1张图片

三、测试
例:查找select,是从slave从库中查找数据
Sharding-JDBC 实现读写分离_第2张图片

例:添加insert,是在master主库中添加数据
Sharding-JDBC 实现读写分离_第3张图片

他的底层是检测到sql语句的select,insert,update,delete等语法来判断是从主库或从库进行操作

学习时的随笔

你可能感兴趣的:(Sharding-JDBC,mybatis,java,spring,boot)