SpringBoot集成ShardingSphere‐JDBC搭配Dynamic多数据源
概述
本文章主要是用SpringBoot 3.3.4 集成 ShardingSphere‐JDBC 5.5.2 并且搭配Dynamic使用的一个应用场景,为什么用了分库分表了还会用到多数据源呢?我们在做一些监控系统、集成系统、工具系统、统计系统等需要去连接多个项目数据库的时候,每个项目都有自己的数据库,而且部分系统又刚好用到了分库分表,那如果我们查询数据是用程序逻辑去适应分库分表的查询是相当的麻烦,这个时候当前应用场景就相当有意义了。之前我发过一篇单独集成shardingsphere-jdbc的文章,有需要的可以移步:Spring Boot 集成 ShardingSphere-JDBC 配置示例
代码
说明
官网地址:http://shardingsphere.apache.org/index_zh.html
shardingsphere主流为YMAL配置和JAVA API配置,本文用的YMAL配置,如果需要了解分库分表的详细逻辑和深入了解功能,可以去官网。
引入maven
<!-- 多数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.6.1</version>
</dependency>
<!-- shardingsphere -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc</artifactId>
<version>5.5.2</version>
</dependency>
application.yaml配置
server:
port: 8095
spring:
datasource:
dynamic:
primary: master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/secure?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
sharding:
driverClassName: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:sharding-dev.yaml
other:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# 其他配置省略
sharding-dev.yaml配置
这里只是做了一个分表的基本配置,一个info主表关联info_audio、info_audit关联表,algorithmClassName的地址是自己分表的自定义算法地址。如果还需要分库分表其他的功能,也只需要在这个配置文件补充就可以了。
dataSources:
center:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://10.3.192.20:3306/center?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: xhl2019cn
rules:
- !SHARDING
tables:
# 主表特殊配置 (使用id分片)
info:
actualDataNodes: center.info_${0..9}
tableStrategy:
standard:
shardingColumn: id # 特殊分片键
shardingAlgorithmName: newsInfoShardingAlgorithm
# 其他表使用默认策略 (news_id分片)
info_audio:
actualDataNodes: center.info_audio_${0..9}
info_audit:
actualDataNodes: center.info_audit_${0..9}
# 绑定表组配置
bindingTables:
- info,info_audio,info_audit
# 默认分表策略 (适用于所有表)
defaultTableStrategy:
standard:
shardingColumn: news_id # 默认分片键
shardingAlgorithmName: newsInfoShardingAlgorithm
# 默认主键生成策略
defaultKeyGenerateStrategy:
column: id
keyGeneratorName: snowflake
# 分片算法配置
shardingAlgorithms:
newsInfoShardingAlgorithm:
type: CLASS_BASED
props:
strategy: STANDARD
algorithmClassName: com.monitor.config.sharding.InfoSharding
newsInfoShardingTableNum: 10
# 分布式序列配置
keyGenerators:
snowflake:
type: SNOWFLAKE
使用
我们配置完成后,就可以正常使用dynamic一样去切换数据库了,在mapper文件使用注解@DS("sharding"),就会使用分表的逻辑去查询数据了。

SpringBoot集成ShardingSphere‐JDBC搭配Dynamic多数据源的更多相关文章
- SpringBoot 集成Spring JDBC
(1)在pom.xml中添加依赖 <!--spring-jdbc的依赖--> <dependency> <groupId>org.springframework.b ...
- SpringBoot 集成mongodb(1)单数据源配置
新项目要用到mongodb,于是在个人电脑上的虚拟环境linux上安装了下mongodb,练习熟悉下. 1.虚拟机上启动mongodb. 首先查看虚拟机ip地址,忘了哈~~ 命令行>ifconf ...
- SpringBoot 集成mongodb(2)多数据源配置
github:https://github.com/xiaozhuanfeng/mongoProj 现MongoDB有两个数据库: pom.xml: <!-- mongodb 配置 --> ...
- SpringBoot集成Mybatis配置动态数据源
很多人在项目里边都会用到多个数据源,下面记录一次SpringBoot集成Mybatis配置多数据源的过程. pom.xml <?xml version="1.0" encod ...
- springboot集成activiti6.0多数据源的配置
最近公司开始开发springboot的项目,需要对工作流进行集成.目前activiti已经发布了7.0的版本,但是考虑到6.0版本还是比较新而且稳定的,决定还是选择activiti6.0的版本进行集成 ...
- SpringBoot学习笔记(三):SpringBoot集成Mybatis、SpringBoot事务管理、SpringBoot多数据源
SpringBoot集成Mybatis 第一步我们需要在pom.xml里面引入mybatis相关的jar包 <dependency> <groupId>org.mybatis. ...
- SpringBoot+Dynamic多数据源动态切换
最近做了个小模块,需求就是项目同时读取三个数据库,操作数据.并不是分库分表,只用定时跑,不需要对外提供接口. 技术选型:SpringBoot + Mybatis Plus(Mybatis) + Dyn ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- SpringBoot Druid整合,SpringBoot 集成Druid
SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...
随机推荐
- BUUCTF---bbbbbras
题目 p = 177077389675257695042507998165006460849 n = 3742182950988779627489716224936732940098864714561 ...
- $.ajax jsonp parsererror
场景重现 通过$.ajax()发起的跨越请求代码如下: $.ajax({ dataType: "JSONP", type: "GET", url: " ...
- HashMap 批量添加
需要初始化一个常量HashMap,并希望在一行语句中完成.避免像这样的事情: hashMap.put("One", new Integer(1)); // adding value ...
- JIT 编译后的代码存储位置
JIT 编译后的代码存储位置 1. 存储位置 JIT 编译后的本地机器代码被存储在 JVM 的 Code Cache(代码缓存区)中. Code Cache 是 JVM 内存的一部分,用于保存 JIT ...
- 1、HTML常用标签
此文章为学习笔记以下内容为HTML常用标签. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset=&quo ...
- 还有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案
与上一篇区别在于,详情里面的模板通常是通用的,被定义在样式文件中,被重复使用,因此无法为其添加后台代码,如果能添加后台代码,请翻阅第一篇:所以需要用到命令的方式来辅助事件的抛出,当然还可以利用第三方库 ...
- 在鸿蒙NEXT中实现完全自定义导航栏
在日常app开发中,导航栏扮演着重要的角色.鸿蒙提供了系统导航栏Navigation,它支持很多属性的修改,但是应用需求更加灵活多变,比如有的导航栏有背景图片,有的导航栏要求渐变色,有的导航栏需要随时 ...
- Flutter开发的高效图片压缩工具:让APP更加丝滑
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 操作系统:Linux -- 详解socket实现与网络编程接口
现在我们来瞧一瞧 Linux 的网络程序,不过想要入门 Linux 的网络编程,套接字也是一个绕不开的重要知识点,正是有了套接字,Linux 系统才拥有了网络通信的能力.而且网络协议的最底层也是套接字 ...
- ASP.NET Core 之路由相关
ASP.NET Core中路由的过程:routing middleware把传入的url与一系列模板进行比对,选择相应的endpoint handler,并将其记录在HttpContext上的requ ...