首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于springboot的多数据源自动配置实现

基于springboot的多数据源自动配置实现

作者头像
用户7353950
发布于 2022-05-11 02:37:22
发布于 2022-05-11 02:37:22
79100
代码可运行
举报
文章被收录于专栏:IT技术订阅IT技术订阅
运行总次数:0
代码可运行

最近做了一个自动支持多数据源配置的功能,基于springboot生态扩展,可自动识别配置文件中的数据库配置参数,并进行autoconfig。

multiple-datasource多数据源支持模块

功能性

  • 支持自动化配置多个数据源;
  • 支持自动化配置持久层框架(mybatis);
  • 支持自动化配置分布式事务管理器(JTA-Atomikos);
  • 支持不同数据源使用不同数据库;
  • 支持不同数据源使用不同数据库且使用不同连接池(hikari、dbcp2、tomcat-pool、druid等);
  • 支持自动适配不同数据库分页特性,自动分页(pagehelper)。

非功能性

  • 基于springboot环境运行;
  • 非侵入式,不影响springboot其他配置。
  • 支持通过配置文件灵活切换、调整、分配数据源。

注意事项

多数据源分布式事务下,首先需要使用支持XA的数据库产品,目前主流数据库如oracle、db2、mysql等都支持

需要对数据库用户进行分布式事务相关授权,如下,否则会提示错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grant select on sys.dba_pending_transactions to jeesite;
grant select on sys.pending_trans$ to jeesite;
grant select on sys.dba_2pc_pending to jeesite;
grant execute on sys.dbms_system to jeesite;

如何使用

1、要使用多数据源自动配置,需要将springboot自带的DataSource相关自动配置类屏蔽自动启动。在springboot项目的启动类上添加如下注解(若引用了druid等第三方数据源,也需将其自配置类屏蔽)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@EnableAutoConfiguration(exclude = { XADataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class,DataSourceAutoConfiguration.class})

2、配置applicaion.properties参数

DataSource相关配置

  • spring.multi-datasource 为识别多数据源配置的prefix,其他参数基本继承自各框架自身提供的可配置参数,只有prefix不同,例如: spring.multi-datasource.xxx.*等同于Spring DataSource配置:spring.datasource.* spring.multi-datasource.xxx.mybatis.* 等同于mybatis配置:mybatis.*
  • spring.multi-datasource.xxx xxx为可自定义的数据源名称,用于区分不同数据源,全局唯一,且不同数据源的配置相互独立
  • spring.multi-datasource.xxx.xa.* 提供配置支持分布式事务的数据源的相关参数,若要使用druid连接池,则需要使用spring.multi-datasource.oracle.xa.data-source-class-name 指定druid数据源名称,默认使用springboot数据源构造器,默认连接池为Hikari

myabits相关配置

使用prefix spring.multi-datasource.xxx.mybatis.*代替mybatis的配置prefixmybatis.*即可 不同数据源配置的mybatis只对当前数据源有效,所以可实现不同模块使用不同数据源,例如:

pagehelper相关配置

  • 使用prefix spring.multi-datasource.mysql.pagehelper.*代替pagehelper的配置prefixpagehelper.*即可

application.properties 参考

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.port=8080

spring.multi-datasource.oracle.xa.data-source-class-name=com.alibaba.druid.pool.xa.DruidXADataSource
spring.multi-datasource.oracle.driver-class-name=oracle.jdbc.OracleDriver
spring.multi-datasource.oracle.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.multi-datasource.oracle.username=******
spring.multi-datasource.oracle.password=******
spring.multi-datasource.oracle.mybatis.mapper-locations=classpath*:mybatis/*1Mapper.xml
spring.multi-datasource.oracle.mybatis.type-aliases-package=com.cvicse.test.bo.base
spring.multi-datasource.oracle.base-packages=com.cvicse.test.dao

spring.multi-datasource.db2.username=******
spring.multi-datasource.db2.password=******
spring.multi-datasource.db2.url=jdbc:db2://127.0.0.1:50000/msdb
spring.multi-datasource.db2.mybatis.mapper-locations=classpath*:mybatis/*2Mapper.xml
spring.multi-datasource.db2.mybatis.type-aliases-package=com.cvicse.test2.bo.base
spring.multi-datasource.db2.base-packages=com.cvicse.test2.dao


spring.multi-datasource.mysql.username==******
spring.multi-datasource.mysql.password==******
spring.multi-datasource.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useSSL=true
spring.multi-datasource.mysql.mybatis.mapper-locations=classpath*:mybatis/*2Mapper.xml
spring.multi-datasource.mysql.mybatis.type-aliases-package=com.cvicse.test2.bo.base
spring.multi-datasource.mysql.base-packages=com.cvicse.test2.dao
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot+Mybatis配置多数据源及事务方案
可能由于业务上的某些需求,我们的系统中有时往往要连接多个数据库,这就产生了多数据源问题。
猿天地
2020/11/13
4.8K0
SpringBoot-MybatisPlus-Dynamic(多数据源)
​ 基于工作上班累死了。。。打开自己电脑 不知道干些啥 就康康 MP 网站康康 更新了啥
杨不易呀
2022/01/19
7950
SpringBoot-MybatisPlus-Dynamic(多数据源)
【SpringBoot DB 系列】Mybatis-Plus 多数据源配置
前面介绍了两种 Mybatis 的数据源配置,当然也少不了 mybatis-plus
一灰灰blog
2021/01/20
2K0
【SpringBoot DB 系列】Mybatis-Plus 多数据源配置
SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
本篇文章主要讲述的是SpringBoot整合Mybatis、Druid和PageHelper 并实现多数据源和分页。其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了,这里就不过多说明了。重点是讲述在多数据源下的如何配置使用Druid和PageHelper 。
田维常
2019/07/16
1.1K0
SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
SpringBoot之SpringBoot整合多数据源
本来按照视屏来说,到上一章的打包运行就没有了,但是我百度翻了好一大波,找到了他的上一期中的其他剩余视屏
彼岸舞
2021/02/02
7960
SpringBoot+Druid+Mybatis配置多数据源
我们在开发一个项目的时候,可能会遇到需要对多个数据库进行读写的需求,这时候就得在项目中配置多个数据源了。在Java项目的开发中,目前最常用的数据操作框架是 Mybatis,开发框架也都基本用上了SpringBoot。而Druid号称最好的数据库连接池,自然也是被广泛使用。
端碗吹水
2020/09/24
7.5K0
SpringBoot2 整合JTA组件,多数据源事务管理
JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。
知了一笑
2020/07/14
7870
SpringBoot2 整合JTA组件,多数据源事务管理
【SpringBoot DB 系列】Mybatis 基于 AbstractRoutingDataSource 与 AOP 实现多数据源切换
前面一篇博文介绍了 Mybatis 多数据源的配置,简单来讲就是一个数据源一个配置指定,不同数据源的 Mapper 分开指定;本文将介绍另外一种方式,借助AbstractRoutingDataSource来实现动态切换数据源,并通过自定义注解方式 + AOP 来实现数据源的指定
一灰灰blog
2021/01/20
1.1K0
【SpringBoot DB 系列】Mybatis 基于 AbstractRoutingDataSource 与 AOP 实现多数据源切换
使用springboot + druid + mybatisplus完成多数据源配置「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说使用springboot + druid + mybatisplus完成多数据源配置「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/02/10
4.5K0
使用springboot + druid + mybatisplus完成多数据源配置「建议收藏」
SpringBoot整合多数据源
我们在调用任何持久层的框架,都是基于JDBC进行操作的,只要集成了Spring框架就一定会注入配置的DataSource获取连接dataSource.getConnection()。既然是我们配置的,我们可以实现一个自定义的DataSource,然后动态提供数据源。说干就干
别团等shy哥发育
2024/05/24
2.2K1
SpringBoot整合多数据源
【实战干货】Springboot实现多数据源整合的两种方式
  一个技术的出现、应用必然是为了解决存在的某些问题,多数据源出现常见的场景如下:
IT学习日记
2022/09/13
4.6K0
【实战干货】Springboot实现多数据源整合的两种方式
[SpringBoot]快速配置多数据源(整合MyBatis)
由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据库。
Rude3Knife的公众号
2019/10/11
1.1K0
[SpringBoot]快速配置多数据源(整合MyBatis)
SpringBoot入门建站全系列(三十一)atomikos实现多数据源的分布式事务
本篇使用atomikos做多数据源的分布式事务,基于Mysql的xa事务数据源,通过atomikos的事务管理器完成。并使用mybatis作为数据库中间件。
品茗IT
2020/05/28
1.9K0
SpringBoot 的多数据源配置
最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发。代码很简单,下面是实现的过程。 环境准备
未读代码
2021/01/04
6.2K0
SpringBoot 的多数据源配置
Spring Boot 2.X(五):MyBatis 多数据源配置
MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度。本文直接以简单的代码示例,如何对 MyBatis 多数据源配置。
朝雾轻寒
2019/10/18
8320
Spring Boot 2.X(五):MyBatis 多数据源配置
SpringBoot+Mybatis+Druid+PageHelper实现多数据源并分页
本篇文章主要讲述的是SpringBoot整合Mybatis、Druid和PageHelper 并实现多数据源和分页。重点是讲述在多数据源下的如何配置使用Druid和PageHelper。
用户4283147
2022/10/27
8480
SpringBoot+Mybatis+Druid+PageHelper实现多数据源并分页
SpringBoot2 配置多数据源,整合MybatisPlus增强插件
注意:mapper层和mapper.xml层分别放在不同目录下,以便mybatis扫描加载。
知了一笑
2019/10/14
2.7K0
SpringBoot2 配置多数据源,整合MybatisPlus增强插件
Springboot 之 Mybatis 多数据源实现
上篇讲解了 JPA 多数据源实现;这篇讲解一下 Mybatis 多数据源实现 。主要采用将不同数据库的 Mapper 接口分别存放到不同的 package,Spring 去扫描不同的包,注入不同的数据源来实现多数据源。原理跟 JPA 多数据源实现基本一致。
BUG弄潮儿
2022/12/05
1.6K0
Springboot 之 Mybatis 多数据源实现
【SpringBoot DB 系列】Mybatis基于AbstractRoutingDataSource与AOP实现多数据源切换
前面一篇博文介绍了 Mybatis 多数据源的配置,简单来讲就是一个数据源一个配置指定,不同数据源的 Mapper 分开指定;本文将介绍另外一种方式,借助AbstractRoutingDataSource来实现动态切换数据源,并通过自定义注解方式 + AOP 来实现数据源的指定
一灰灰blog
2021/01/17
1.1K0
【SpringBoot DB 系列】Mybatis基于AbstractRoutingDataSource与AOP实现多数据源切换
SpringBoot和Mybatis配置多数据源连接多个数据库
目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑。在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL。在SpringBoot中,配置多数据源的方式十分便捷,
java之旅
2020/01/08
16.9K2
推荐阅读
相关推荐
SpringBoot+Mybatis配置多数据源及事务方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档