SpringBoot + ShardingSphere-JDBC 实现读写分离

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 上一篇我们用 ShardingSphere-Proxy实现了读写分离ShardingSphere 实战之读写分离这一次我们用 ShardingSphere-JDBC 来实现一下

上一篇我们用 ShardingSphere-Proxy实现了读写分离


ShardingSphere 实战之读写分离


这一次我们用 ShardingSphere-JDBC 来实现一下


引入依赖


我本地用的是 springboot 2 的版本,引用的 ShardingSphere-JDBC 的5.0.0-beta 版本


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


修改配置文件


spring:
  profiles:
    include: common-local
  shardingsphere:
    datasource:
      names: write-ds,read-ds-0
      write-ds:
        jdbcUrl: jdbc:mysql://mysql.local.test.myapp.com:23306/test?allowPublicKeyRetrieval=true&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: nicai
        connectionTimeoutMilliseconds: 3000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
        minPoolSize: 1
        maintenanceIntervalMilliseconds: 30000
      read-ds-0:
        jdbcUrl: jdbc:mysql://mysql.local.test.read1.myall.com:23306/test?allowPublicKeyRetrieval=true&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: nicai
        connectionTimeoutMilliseconds: 3000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
        minPoolSize: 1
        maintenanceIntervalMilliseconds: 30000
    rules:
      readwrite-splitting:
        data-sources:
          glapp:
            write-data-source-name: write-ds
            read-data-source-names:
              - read-ds-0
            load-balancer-name: roundRobin # 负载均衡算法名称
        load-balancers:
          roundRobin:
            type: ROUND_ROBIN # 一共两种一种是 RANDOM(随机),一种是 ROUND_ROBIN(轮询)


这里主要根据官网的 property 配置文件转的 yaml 文件,需要注意几点:


  • type: com.zaxxer.hikari.HikariDataSource 我用的是 Hikari 连接池,根据你的实际情况来
  • driver-class-name: com.mysql.cj.jdbc.Driver 不同 mysql 版本不一样,根据你的实际情况来,我的是 mysql 8.0
  • jdbcUrl ,官网上写的是 url, 不对,要写成 jdbcUrl


遇到的问题


Description:
Configuration property name 'spring.shardingsphere.datasource.write_ds' is not valid:
    Invalid characters: '_'
    Bean: org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration
    Reason: Canonical names should be kebab-case ('-' separated), lowercase alpha-numeric characters and must start with a letter
Action:
Modify 'spring.shardingsphere.datasource.write_ds' so that it conforms to the canonical names requirements.


之前把配置文件中的某些名字配置用下划线写了,不行,得用中线。


测试


所有的改动只有以上这么多,还是比较简单的,以下的读库请求打过来时的监控,证明读请求都过来了,写库没有。


这是写库的:


22.jpg


这是读库的:


23.jpg

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
50 0
|
1月前
|
Java 数据库连接 网络安全
springboot使用Pivotal Greenplum JDBC如何进行配置
【5月更文挑战第23天】springboot使用Pivotal Greenplum JDBC如何进行配置
43 6
|
1月前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
1月前
|
负载均衡 算法 Java
Sharding-JDBC如何实现读写分离
通过以上步骤,Sharding-JDBC能够实现数据库的读写分离,从而提高应用程序的读取性能。欢迎关注威哥爱编程,一起学习成长。
|
1月前
|
Java
SpringBoot整合sharding-jdbc实现分库分表
SpringBoot整合sharding-jdbc实现分库分表
69 1
|
1月前
|
Java 数据库
SpringBoot出现com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime va
SpringBoot出现com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime va
25 0
|
1月前
|
Java 数据库连接 数据库
Springboot 之 JDBC 多数据源实现
Springboot 之 JDBC 多数据源实现
73 0
|
存储 Java 数据库连接
SpringBoot集成JDBC组件
JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。本文主要讲解SpringBoot中如何集成JDBC
597 0
SpringBoot集成JDBC组件
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的汽车4s店管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的汽车4s店管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
34 6
基于SpringBoot+Vue的汽车4s店管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的拍卖管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的拍卖管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
35 9