软件培训网站建设,国内装修公司,竞价托管如何托管,做平面设计必看的网站背景信息#xff1a; 面对日益增加的系统访问量#xff0c;数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说#xff0c;将数据库拆分为主库和从库。其中主库负责处理事务性的增删改操作#xff0c;从库负责处理查询操作#…背景信息 面对日益增加的系统访问量数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说将数据库拆分为主库和从库。其中主库负责处理事务性的增删改操作从库负责处理查询操作这样就能够有效的避免因数据更新导致的行锁进而使得整个系统的查询性能得到极大的改善。那么我们在项目中可以使用ShardingJDBC框架通过Java代码来完成读写分离这样就可以在执行select的时候查询从库在执行insert、update、delete的时候操作主库了。ShardingJDBC的介绍 Sharding-JDBC定位为轻量级Java框架在Java的JDBC层提供的额外服务。它使用客户端直连数据库以jar包形式提供服务无需额外部署和依赖可理解为增强版的JDBC驱动完全兼容JDBC和各种ORM框架。 适用于任何基于 JDBC 的 ORM 框架如JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC支持任何第三方的数据库连接池如DBCP, C3P0, BoneCP, HikariCP 等支持任意实现 JDBC 规范的数据库目前支持 MySQLPostgreSQLOracleSQLServer 以及任何可使用 JDBC 访问的数据库通过使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离环境准备 部署主从复制的两台MySQL服务器并将MySQL服务正常启动在MySQL数据库中的主库中正常创建自己需要的数据库以及相关的数据库表从库会自动同步相应的数据所以不用操作从库java项目使用Sharding-JDBC进行读写分离配置 在maven项目的pom.xml文件中增加Sharding-JDBC的maven坐标 dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-spring-boot-starter/artifactIdversion4.1.1/version
/dependency 在spring boot项目的application.yml中增加数据源的配置信息 spring:
# datasource:
# druid:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3333/study-pro?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNulluseSSLfalseallowPublicKeyRetrievaltrue
# username: root
# password: 123456shardingsphere:datasource:# 数据源的名称可以随意定义但是需要和下面所设定的配置一致names:master,slave# 主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.xxx.xxx:3306/study-pro?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNulluseSSLfalseallowPublicKeyRetrievaltrueusername: rootpassword: 123456# 从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.xxx.xxx:3306/study-pro?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNulluseSSLfalseallowPublicKeyRetrievaltrueusername: rootpassword: 123456# 读写分离配置masterslave:# 负载均衡算法名称轮询。如果有多个从库时的负载均衡策略。round_robin(轮询)和random(随机)load-balance-algorithm-type: round_robin# 最终的数据源名称name: shardingDataSource# 主库数据源名称master-data-source-name: master# 从库数据源名称列表多个逗号分隔slave-data-source-names: slaveprops:sql:# 开启SQL显示默认falseshow: truemain:# 如果当前项目中存在同名的bean,后定义的bean会覆盖先定义的。因为一个同名的 dataSource 的bean在com.alibaba.druid.spring.boot.autoconfigure包下的DruidDataSourceAutoConfigure类加载时已经声明了所以我们需要用到的是 ShardingJDBC包下的dataSource所以我们需要配置上述属性让后加载的覆盖先加载的allow-bean-definition-overriding: true 注意 在application.yml文件中添加spring.main.allow-bean-definition-overridingtrue的配置这是为了如果当前项目中存在同名的bean,后定义的bean会覆盖先定义的若在sharding-jdbc、mybatis、druid中使用时请选择下列jar包得搭配方式不然将会导致sqlSessionFactory不能正常初始化无法正常启动服务可选择下列搭配方式 sharding-jdbc4.0.0-RC1应搭配 mybatis、druid-spring-boot-starter使用sharding-jdbc4.0.0-RC2以上版本应搭配 mybatis、com.alibaba.druid非spring boot版本使用功能测试 在增删查改的逻辑下若控制台打印相应的sharding-jdbc的SQL日志并且功能正常使用则证明已经成功搭建好读写分离 官方参考文档 概览 :: ShardingSphere (apache.org)shardingsphere/examples at master · apache/shardingsphere (github.com)