Spring4 Mybatis配置多个数据源

概要

在实际项目当中,会使用多个数据源,比如replication结构, 或者基表库和用户库等等。
配置多个数据源有很多方式, 在这里只记载用annotation方式的多个数据源配置方式给记录下来。
方便以后再来这边做拷贝。

配置

版本,依赖

dependencies {compile 'org.springframework:spring-webmvc:4.3.14.RELEASE'compile 'org.mybatis:mybatis-spring:1.3.1'compile 'org.mybatis:mybatis:3.4.5'compile 'org.springframework:spring-jdbc:4.3.14.RELEASE'compile 'org.apache.tomcat:tomcat-jdbc:9.0.4'compile 'mysql:mysql-connector-java:6.0.6'compile 'commons-dbcp:commons-dbcp:1.4'
}

spring

application-context.xml

内容看起来很长, 但是细看也没什么东西。 另外#{jdbc[‘properties.key’]} 这部分需要在util:properties标签定义的properties文件里面提前配置好。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util"xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsdhttp://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- property placeholder 读取数据库连接信息 --><util:properties id="jdbc" location="classpath:/properties/jdbc.properties"/><!-- 激活Annotation方式的transacton --><tx:annotation-driven transaction-manager="masterTransactionManager"/><!-- datasource共同部分 --><bean id="datasource-common" abstract="true"><property name="driverClassName" value="#{jdbc['common.driverClassName']}" /><property name="maxActive" value="#{jdbc['common.maxActive']}"/><property name="maxIdle" value="#{jdbc['common.maxIdle']}"/><property name="maxWait" value="#{jdbc['common.maxWait']}"/><property name="validationQuery" value="#{jdbc['common.validationQuery']}"/><property name="testOnBorrow" value="#{jdbc['common.testOnBorrow']}"/><property name="testOnReturn" value="#{jdbc['common.testOnReturn']}"/><property name="testWhileIdle" value="#{jdbc['common.testWhileIdle']}"/></bean><!-- ▼▼▼ master area ▼▼▼ --><!-- master的sessionfactory 设定 --><bean id="masterSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="masterDataSource"/><property name="mapperLocations" value="classpath*:mapper/**/*.xml"/></bean><!-- master的Transaction设定 --><bean id="masterTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="masterDataSource"/><property name="globalRollbackOnParticipationFailure" value="false"/></bean><!--  master datasource --><bean id="masterDataSource" class="org.apache.commons.dbcp.BasicDataSource" parent="datasource-common"><property name="url" value="#{jdbc['master.url']}"/><property name="username" value="#{jdbc['master.userName']}"/><property name="password" value="#{jdbc['master.password']}"/></bean><!-- datasource annotation设定 --><mybatis:scan base-package="cn.group.company" annotation="cn.group.company.common.annotations.MasterDB" factory-ref="masterSqlSessionFactory"/><!-- ▲▲▲  master area ▲▲▲ --><!-- ▼▼▼  slave ▼▼▼ --><!-- sessionfactory 设定 --><bean id="slaveSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="slaveDataSource"/><property name="mapperLocations" value="classpath*:mapper/**/*.xml"/></bean><!-- Transaction设定 --><bean id="slaveTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="slaveDataSource"/><property name="globalRollbackOnParticipationFailure" value="false"/></bean><!-- annotation transaction 激活 --><tx:annotation-driven transaction-manager="slaveTransactionManager"/><!--  slave datasource --><bean id="slaveDataSource" class="org.apache.commons.dbcp.BasicDataSource" parent="datasource-common"><property name="url" value="#{jdbc['slave.url']}"/><property name="username" value="#{jdbc['slave.userName']}"/><property name="password" value="#{jdbc['slave.password']}"/></bean><!-- datasource annotation定义 --><mybatis:scan base-package="cn.group.company"annotation="cn.group.company.common.annotations.SlaveDB" factory-ref="slaveSqlSessionFactory"/><!-- ▲▲▲  slave ▲▲▲ -->
</beans>

java部分

  • 2个annotation

    • MasterDB.java

      package cn.group.company.common.annotations;import java.lang.annotation.Documented;
      import java.lang.annotation.ElementType;
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
      import java.lang.annotation.Target;@Target(ElementType.TYPE)
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      public @interface MasterDB {}
    • SlaveDB.java

      package cn.group.company.common.annotations;import java.lang.annotation.Documented;
      import java.lang.annotation.ElementType;
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
      import java.lang.annotation.Target;@Target(ElementType.TYPE)
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      public @interface SlaveDB {}

    配置到这里基本差不多了。 在实际开发Mapper的时候只要加上Annotation,会根据annotation调用对应的数据源。

实际应用

  • ProductMapper.java
package cn.group.company.api.product.mapperimport java.util.List;import org.apache.ibatis.annotations.Mapper;import cn.group.company.api.product.domain.ProductDomain;
import cn.group.company.common.annotations.SlaveDB;@Mapper
@SlaveDB  // 会调用slave db
public interface AdMapper {public List<ProductDomain> getProductInfo();
}

测试

待补充

补充

在配置过程中,在mybatis:scan标签定义的base-package里如果找不到@SlaveDB或者@MasterDB,Spring在启动的时候会报一个找不到bean的错误。所以给默认找个base-package的任意mapper上把这两个Annotation加进去,以防启动的时候报错。

Spring4 Mybatis配置多个数据源相关推荐

  1. SpringBoot+Mybatis配置Druid多数据源

    开篇之前,说一句题外话.多数据源和动态数据源的区别. 多数据源,一般用于对接多个业务上独立的数据库(可能异构数据库). 动态数据源,一般用于大型应用对数据切分. 配置参考 如何配置多数据源,网上教程一 ...

  2. 如何使用spring配合mybatis配置多个数据源并应用?

    使用多数据源的场景应该是很多的,如操作同一台服务器上不同的数据库,或者多地机器上的相同或不相同数据库. 虽然涉及到不同数据库时,我们也许可以通过跨库操作的方式,如 other.user 使用同一数据源 ...

  3. 【spring boot】 mybatis配置双数据源/多数据源

    前言 spring boot 2.0.0.RELEASE maven 3.5 eclipse 4.9.0 mybatis 1.3.2 mybatis generator 1.3.2 pagehelpe ...

  4. druid 多数据源_Spring Boot + Mybatis 中 配置Druid多数据源并实现自由切换

    概述 前面我们已经介绍过了对MyBatis.Druid的整合,接下来我们在之前的基础上做扩展,实现对Druid多数据源的配置以及动态切换数据源. 问题:多数据源使用场景有哪些呢? 回答:在业务发展中, ...

  5. SpringBoot中mybatis配置多数据源

    首先需要创建多个数据库 简单的user表 CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAU ...

  6. mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源

    山石彦 | 作者 urlify.cn/vQzIne | 来源 最近工作中有用到双数据源,一个项目(中台)中需要操作两个不同的数据库.当时考虑到了两种方式, 1.通过http请求访问(A项目访问d1数据 ...

  7. 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解

    该系列文章针对 Mybatis 3.5.1 版本 在上一篇文章中,谈到了 <environment> 标签解析会构建 Environment 对象,Environment 对象中有两个关键 ...

  8. mybatis 配置多数据源 java,SpringBoot+MyBatisPlus配置多数据源读写分离

    首先呢,我们这里使用MySQL的数据库,可以简单配置一下主从备份来实现两个数据库的数据同步 项目的配置目录大概是这样的作为参考 第一步.定义一个枚举类声明当前的数据源类型 package com.yu ...

  9. spring mybatis 多数据源配置 jeesite 多数据源配置

    spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...

最新文章

  1. 我国网络安全人才培养缺口巨大
  2. 公开仓库中Docker镜像的漏洞分析结果发布
  3. 开源网络备份软件bacula(安装bacula)
  4. Spring @Value注解无法正确赋值问题
  5. php bloginfo templatedirectory,WordPress函数:bloginfo(显示博客信息)
  6. 打印容器_3D打印:增材点阵结构在压力容器优化设计中的应用
  7. leetcode 1365. 有多少小于当前数字的数字(排序)
  8. 扩容是元素还是数组_Map扩容源码
  9. Android Camera调用流程
  10. 异构平台同步(Mysql到Oracle)
  11. Bootstrap公司年会抽奖活动代码
  12. 列表推导(list comprehension)--Python
  13. 数据库中的年月日表达
  14. 神仙工具!百度网盘资源一键转存阿里云盘,YYDS
  15. 自学c语言需要什么要求,学习c语言需要什么基础
  16. python如何表示正整数_python 正整数
  17. android最佳投屏,Android投屏神器(scrcpy使用教程)
  18. 魔兽世界服务器分组信息五区,魔兽世界服务器 魔兽世界国服所有大区的所有服务器名...
  19. 【Pygame实战】这游戏有毒,刷爆朋友圈:小编已与病毒版贪吃蛇大战了三百回合,最高分339?
  20. matlab自动变量名,matlab中如何自动给变量命名?

热门文章

  1. 在设计四人抢答器中灯全亮_四路竞赛抢答器的设计
  2. cygwin安装cron服务
  3. 【计算机毕业设计】java健康管理平台
  4. niuke题霸SQ/L篇
  5. excel 运算十分缓慢和卡顿怎么办?
  6. 连续时间的马尔可夫链
  7. caxa发生文件读写异常_为什么提示caxa读取文件错误
  8. Linux(openSSL)上RSA密钥生成和使用(java)
  9. CTF中那些迷惑人的”base64“
  10. ESB产品UI升级总结