前面也分析过springboot集成shardingsphere组件实现分库分表。分库分表主要解决海量数据引起的IO问题、查询慢等问题。
ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 3 款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能。
1、ShardingSphere-JDBC:定位为轻量级 Java 框架,在 Java 的 JDBC 层提供额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。
2、ShardingSphere-Proxy:定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前提供 MySQL/PostgreSQL 版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端操作数据,对 DBA 更加友好。
3、ShardingSphere-Sidecar(规划中):定位为 Kubernetes 的云原生数据库代理,以 Sidecar 的形式代理所有对数据库的访问。通过无中心、零侵入的方案提供与数据库交互的的啮合层,即 Database Mesh,又可称数据网格。
示例

  1. pom依赖
     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.shardingsphere/sharding-jdbc-spring-boot-starter --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins><resources><!-- 编译 src/main/java 目录下的 mapper 文件 --><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>

springboot版本为2.6.2,未发现版本导致的无法找到数据源问题。

  1. application.properties配置文件
server.port=9001#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/ds0
#spring.datasource.username=root
#spring.datasource.password=spring.application.name=sharding_sphere
spring.shardingsphere.datasource.names=ds0,ds1# 数据源
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0?characterEncoding=utf-8
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1?characterEncoding=utf-8
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=# 如果分表,默认分库数据源策略
#spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=id
#spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2}# 不分表(application.properties没有为表单独配置),默认数据源策略
spring.shardingsphere.sharding.default-data-source-name=ds1# user表的分表配置
spring.shardingsphere.sharding.tables.user.actual-data-nodes=ds0.user_$->{[0,2]},ds1.user_$->{[1,3]}
# user库策略(也可以采用默认的)
spring.shardingsphere.sharding.tables.user.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.user.database-strategy.inline.algorithm-expression=ds$->{id % 2}
# user表策略
spring.shardingsphere.sharding.tables.user.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.user.table-strategy.inline.algorithm-expression=user_$->{id % 4}
#spring.shardingsphere.sharding.tables.user.key-generator.column=id
#spring.shardingsphere.sharding.tables.user.key-generator.type=SNOWFLAKE

注意数据源的type、drirvier-class-name,需要找到所用的类

  1. mapper
@Mapper
public interface UserMapper {Long addUser(User user);List<User> queryAllUser();User queryUserById(Long id);}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ldc.springboot_shardingsphere.mapper.UserMapper"><resultMap id="userResultMap" type="com.ldc.springboot_shardingsphere.model.User"><result column="id" property="id"/><result column="user_name" property="userName"/><result column="age" property="age"/><result column="address" property="address"/></resultMap><!-- 插入用户 --><insert id="addUser" useGeneratedKeys="true" keyProperty="id">insert into user (id,user_name,age,address )values (#{id},#{userName},#{age},#{address})</insert><!-- 查询所有用户 --><select id="queryAllUser" resultMap="userResultMap">SELECT * FROM user</select><select id="queryUserById" resultMap="userResultMap">SELECT * FROM user  WHERE id=#{id}</select></mapper>
  1. 测试
/*** 插入若干记录*/@Testpublic void addUser() {for (long i = 1; i < 11; i++) {User user = User.builder().id(i).userName("caocao").age(29).address("杭州").build();userMapper.addUser(user);System.out.println("插入用户成功,uid=" + user.getId());}}/*** 查询所有记录*/@Testpublic void queryAllUser() {List<User> users = userMapper.queryAllUser();users.sort((t1, t2) -> {if (t1.getId() < t2.getId()) {return -1;} else if (t1.getId() > t2.getId()) {return 1;} else {return 0;}});System.out.println(users);}

注意druid数据源的使用,去除掉对DruidDataSourceAutoConfigure的自动配置。

springboot+shardingsphere温故而知新相关推荐

  1. SpringBoot + ShardingSphere 秒级分库分表!

    Spring Boot 作为主流微服务框架,拥有成熟的社区生态.市场应用广泛,为了方便大家,整理了一个基于spring boot的常用中间件快速集成入门系列手册,涉及RPC.缓存.消息队列.分库分表. ...

  2. 【分库分表】ShardingSphere分库分表实战

    一.参考资料 概览 :: ShardingSphere ShardingSphere之分库&分表_JustryDeng-CSDN博客_shardingsphere 分表 利用ShardingS ...

  3. 分库分表 springboot+dubbo+mybatisPlus+shardingSphere

    1.使用的框架有 springboot 2.1.1 + apache dubbo 2.7.2+ mybatisPlus 3.1.0 +shardingSphere 4.1.0 数据库连接池:Hikar ...

  4. 【ShardingSphere技术专题】「ShardingJDBC实战阶段」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

    前提介绍 ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Shardin ...

  5. shardingsphere: SpringBoot整合shardingjdbc实现读写分离

    文章目录 1. 引入jar包 2. 编写application.properties 3. 事务测试 3.1 测试代码 附录 1. 引入jar包 <dependency><group ...

  6. ShardingSphere分库分表(SpringBoot+mybatis+mysql)配置

    一.什么是ShardingSphere 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务. 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增 ...

  7. SpringBoot 2.x ShardingSphere分库分表实战

    本文转载自微信公众号:李浩东的博客 一. 项目需求 在之前我做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的开源框架,最常见的就是mycat,sharding-sphe ...

  8. springboot+shedule之温故而知新

    定时任务的实现方式 Timer:Java自带的java.util.Time类,这个类允许你调度一个java.util.TimerTask任务.这种方式让程序按照某个频度执行,但不能在指定时间执行.一般 ...

  9. 太强了!这款轻量级的数据库中间件完美解决了SpringBoot中分库分表问题

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:Macky_He blog.csdn.net/Macky_H ...

最新文章

  1. ​iOS 9音频应用播放音频之第一个ios9音频实例2
  2. python【蓝桥杯vip练习题库】ADV-313字符串顺序比较
  3. 基于Java语言构建区块链(六)—— 交易(Merkle Tree)
  4. 用java实现二分搜索算法分析
  5. powerbuilder判断复选框是否选中_如何判断基金经理投资风格呢?方法仅供参考
  6. spring AOP自定义注解方式实现日志管理
  7. 性能测试基础之JMeter聚合报告详解
  8. Java并发(五)——锁
  9. server-2016安装软件提示缺失msvcr120.dll解决
  10. AngularJS简单例子
  11. pycharm快捷键大全
  12. 十进制转换成二进制的计算器
  13. 【趣读官方文档】1.管家的抉择 (Android进程生命周期)
  14. 通向架构师的道路(第三天)之apache性能调优 (转)
  15. pulsar client jar包选择-shaded 还是original
  16. 基于arduino超声波测距学习
  17. 《软件测试》读书笔记(持续更新)
  18. 用css,html,js搭建一个书店购物系统
  19. 【Moasure魔尺】一款来自未来科技的测量设备
  20. 重装系统后QQ聊天记录恢复方法

热门文章

  1. img图片的预览和下载(iframe基本使用),图片转file格式,file文件转base64格式,base64的编码和解码
  2. hive函数to_unix_timestamp与unix_timestamp效率问题
  3. 2.4市场需求文档MRD
  4. 【MULTISPECTRAL FUSION FOR OBJECT DETECTIONWITH CYCLIC FUSE-AND-REFINE BLOCKS】论文阅读
  5. UVa Online Judge的重建
  6. ACM-ICPC 常用算法刷题网站整理
  7. 网络安全笔记第三天day3(kali2021系统的安装)
  8. matplotlib marker 设置
  9. 向着第二层 第一阶段第四天
  10. Unity 游戏性能优化(4)资源优化