一般情况下,一个项目中只会有一个datasource,但是在某些情况、或者业务需求的情况下会出现一个项目有多个datasource的情况,当满足一定条件的时候,对数据库的操作就会从一个一个datasource切换到另一个datasource.
那么这种多数据源的配置与实现原理是什么样的?
    
一、spring boot 下配置多个数据源:
 
二、实现原理:
        目前持久层框架常用的就是mybatis与hibernate, 与数据库进行交互的工作就是持久层框架做的事。要连接到数据库,就需要数据库的url,端口,密码等信息,这些信息的抽象出来我们就叫做数据源,也就是datasource,下面是常见datasource的一种配置:
    
上图是yml格式的配置,也有xml、properties等格式。格式不同,但核心是一样的,就是保存连接数据库的各种必要信息。当spring框架或者其他框架扫描到个datasource的配置,就会根据这个配置生成一个datasource的bean实例。
     而持久层框架进行了一系列准备工作后,需要将sql语句发送到数据库,那么这个时候就需要使用datasource, 其中最核心的就是持久层框架定义了一个 Transaction接口,这个Transcation接口有个getConnection()方法,内容就是从datasource中获取一个与数据库的Connection,通过操作这个Connection将数据发送到数据库:
    mybatis定义的transaction:
 
Hibernate定义的transaction接口,与mybatis有一些区别,但是在核心方法commit上,都是在操作connection对象:
 
多个Transaction接口、类的定义:
,从上图可以看出,transaction这个定义在很多地方使用。实际上,只要是需要通过网络进行通信的功能,都会有这么一个类似datasource的东西来存储通信时的必要配置信息(url、端口、超时时间、协议等等···),这个东西可能叫做datasource,也可能叫做其他名字,但他其实底层本质就是一个socket,通过层层封装与抽象来提供给大家使用。
 所以就算不使用spring boot的那一套配置,自己也能实现多数据源的切换,无非就是先定义多个datasource的bean实例出来,然后根据项目中使用的持久层框架的不同来重写Transaction接口中的方法(也可能是其他接口,主要是看框架操作datasource时是怎么定义的接口,然后再实现该接口就可以了)。以上虽然短短几句话就说完了,以后有时间再贴出自己实现的多个数据源的实现代码。
 

多个datasource的配置与实现原理的更多相关文章

  1. 在Sping的配置文件中,关于dataSource的配置,就我们常用的方法大致可以有三种:

    在Sping的配置文件中,关于dataSource的配置,就我们常用的方法大致可以有三种: 1.一般的配置方法,直接在配置中指定其值.具体的例子我们参照Mysql的配置如下: <bean id= ...

  2. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  3. SpringCloud 详解配置刷新的原理 使用jasypt自动加解密后 无法使用 springcloud 中的自动刷新/refresh功能

    之所以会查找这篇文章,是因为要解决这样一个问题: 当我使用了jasypt进行配置文件加解密后,如果再使用refresh 去刷新配置,则自动加解密会失效. 原因分析:刷新不是我之前想象的直接调用conf ...

  4. SSH免密登陆配置过程和原理解析

    SSH免密登陆配置过程和原理解析 SSH免密登陆配置过很多次,但是对它的认识只限于配置,对它认证的过程和基本的原理并没有什么认识,最近又看了一下,这里对学习的结果进行记录. 提纲: 1.SSH免密登陆 ...

  5. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  6. hystrix ,feign,ribbon的超时时间配置,以及原理分析

    背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...

  7. oozie配置安装与原理

     概述 当前开源的hadoop任务工作流管理主要有oozie和Azkaban,本文先介绍oozie的配置安装与基本运行原理. 配置安装 (参考https://segmentfault.com/a/11 ...

  8. Hadoop第一式:配置Linux环境之免密配置及SSH原理

    一.配置SSH免密登录 进入/.ssh目录,执行密钥生成指令 ssh-keygen -t rsa (rsa为默认加密格式) 然后会出现四个提示,让你选择密钥保存路径.指纹.拍照啥的,不用管它直接回车过 ...

  9. 尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理

    EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置 @AutoConfigureOrder(Ordered.HIGHEST_PREC ...

随机推荐

  1. 反汇编分析objc函数枢纽objc_msgSend

    在分析objc_msgSend之前,先来搞清楚另一个问题. 函数是什么?可能会答 void foo(void) {} 像这样就是一个函数.或者函数包括函数原型和函数定义,是一段执行某样功能的机器代码. ...

  2. Tarjan-割点

    割点——tarjan #include <bits/stdc++.h> using namespace std; ; ; int n, m; int ans;//个数 * MAXM], n ...

  3. Python自动化办公之操作Excel文件

    模块导入 import openpyxl 读取Excel文件 打开Excel文件 workbook = openpyxl.load_workbook("test.xlsx") 输出 ...

  4. 关于手机微信端ios的input不能选中问题解决方案

    最近在做一个微信端的商城,以前做web端的比较多,手机端做的相对来说要少点,老板说让我用俗称”靠谱的移动前端框架”—-AUI来搭建项目. 当时觉得用不用框架无所谓啦.结果后来写到一半把项目发布到手机上 ...

  5. vue项目中安装使用vux

    vux是个vue的移动端框架. 目前移动端UI框架这么多,为啥选择vux呢?vux虽然说是个个人维护项目,但是有15000+个star,应该不比其他的团队开源框架差. 最重要的是,目前要做微信公众号和 ...

  6. Spring Cloud Alibaba(四)实现Dubbo服务消费

    本项目演示如何使用 Spring Cloud Alibaba 完成 Dubbo 的RPC调用. Spring Cloud与Dubbo Spring Cloud是一套完整的微服务架构方案 Dubbo是国 ...

  7. 【如何让代码变“高级”(一)】-Spring组合注解提升代码维度

    原创不易,点个赞

  8. PHP+Redis实现延迟任务,实现自动取消与完成订单

    简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) : (A)业务场景: 1.当一个业务触发以后需要启动一个定时任务,在指定时间内再去执行一个任务( ...

  9. php之自动加载(懒加载)

    有A类和B类,如果在A类实例化B类,最简单直接的方法就是在B中使用include require_once A的文件,但是这种方法显然是不友好的,在框架中叶不是这么做的,在框架中使用的是自动加载的机制 ...

  10. 【日常错误】spring-boot配置文件读取不到

    最近在用spring-boot做项目时,遇到自定义的配置文件无法读取到的问题,通过在appcation.java类上定义@PropertySource(value = {"classpath ...