前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于springboot的多数据源自动配置实现

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

作者头像
用户7353950
发布2022-05-11 10:37:22
7290
发布2022-05-11 10:37:22
举报
文章被收录于专栏:IT技术订阅

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

multiple-datasource多数据源支持模块

功能性

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

非功能性

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

注意事项

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

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

代码语言:javascript
复制
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
复制
@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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • multiple-datasource多数据源支持模块
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档