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

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

multiple-datasource多数据源支持模块

功能性

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

非功能性

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

注意事项

  • 多数据源分布式事务下,首先需要使用支持XA的数据库产品,目前主流数据库如oracle、db2、mysql等都支持
  • 需要对数据库用户进行分布式事务相关授权,如下,否则会提示错误:

    ResourceException: Error in recovery
    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等第三方数据源,也需将其自配置类屏蔽)

@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只对当前数据源有效,所以可实现不同模块使用不同数据源,例如:
    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

pagehelper相关配置

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

application.properties 参考

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

原文地址:https://www.cnblogs.com/hibugs/p/10880771.html

时间: 2024-10-07 18:49:50

基于springboot的多数据源自动配置实现的相关文章

SpringBoot是如何实现自动配置的?--SpringBoot源码(四)

注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三) 温故而知新,我们来简单回顾一下上篇的内容,上一篇我们分析了SpringBoot的条件注解@ConditionalOnXxx的相关源码,现挑重点总结如下: SpringBoot的所有@ConditionalOnXxx的条件类OnXxxCondition都是继承于SpringBootCondition

SpringBoot核心原理之自动配置

从@SpringBootApplication注解入手 为了揭开SpringBoot的奥秘,我们直接从Annotation入手,看看@SpringBootApplication里面,做了什么?打开@SpringBootApplication这个注解,可以看到它实际上是一个复合注解 1 @Target(ElementType.TYPE) 3 @Retention(RetentionPolicy.RUNTIME) 5 @Documented 7 @Inherited 9 @SpringBootCon

SpringBoot Mybatis双数据源的配置

近期因为公司项目的需要,用上了maven和Springboot,对于java开发这块,早闻maven是个好东西,但一直没有去用,感觉用maven帮我们自己做了太多的事情,一个项目跑起来都不知道背后做了些什么,现在想想,可能那个时候脑子进水了吧. Springboot作为Spring的简约版(我是这么叫的,没有任何依据),将原来Spring需要做的配置文件,改为了注解,提供了大量的***start组件来帮我们做了很多初始化的处理. 但是今天我想要分享的不是maven如何搭建一个helloword的

基于springboot的多数据源配置

发布时间:2018-12-11 技术:springboot1.5.1 + maven3.0.1+ mybatis-plus-boot-starter2.3.1 + dynamic-datasource-spring-boot-starter2.4.2 + jdk1.8 概述 详细 代码下载:http://www.demodashi.com/demo/14622.html 一.前言 本篇demo实现了springboot项目实现了多数据源切换的功能.对一些有多个数据库的项目来说是一个很好的参考.

SpringBoot嵌入式Tomcat的自动配置原理

在读本篇文章之前如果你读过这篇文章SpringBoot自动装配原理解析应该会更加轻松 准备工作 我们知道SpringBoot的自动装配的秘密在org.springframework.boot.autoconfigure包下的spring.factories文件中,而嵌入Tomcat的原理就在这个文件中加载的一个配置类:org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguratio

面试题: SpringBoot 的自动配置原理及定制starter

3.Spring Boot 的自动配置原理 package com.mmall; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] ar

助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoo

注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接如何分析SpringBoot源码模块及结构?--SpringBoot源码(二) 上一篇分析了SpringBoot源码结构及各个模块pom之间的关系后,那么此篇开始就开始解开SpringBoot新特性之一--自动配置的神秘面纱了.因为SpringBoot自动配置原理是基于其大量的条件注解ConditionalOnXXX,因此,本节我们先来撸下Spring的条件注解的相关源码. 2 SpringBoot的派生条件

Springboot学习~7:SpringMVC自动配置

Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:==(WebMvcAutoConfiguration)== Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans. 自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(转

SpringBoot源码分析----(一)SpringBoot自动配置

前言 springboot项目将模块化设计发挥到及至,需要什么模块,只需导入这个模块对应的stater即可,当然,用户根据业务需要自定义相关的stater,关于自定义stater在后续章节将一一解说,学习springboot,首要了解springboot的自动配置原理,我们从springboot项目的主启动类说起逐步解读springboot自动配置的奥秘. springboot自动配置解读 @SpringBootApplication public class SpringBootQuickAp