Spring4 Mybatis配置多个数据源
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配置多个数据源相关推荐
- SpringBoot+Mybatis配置Druid多数据源
开篇之前,说一句题外话.多数据源和动态数据源的区别. 多数据源,一般用于对接多个业务上独立的数据库(可能异构数据库). 动态数据源,一般用于大型应用对数据切分. 配置参考 如何配置多数据源,网上教程一 ...
- 如何使用spring配合mybatis配置多个数据源并应用?
使用多数据源的场景应该是很多的,如操作同一台服务器上不同的数据库,或者多地机器上的相同或不相同数据库. 虽然涉及到不同数据库时,我们也许可以通过跨库操作的方式,如 other.user 使用同一数据源 ...
- 【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 ...
- druid 多数据源_Spring Boot + Mybatis 中 配置Druid多数据源并实现自由切换
概述 前面我们已经介绍过了对MyBatis.Druid的整合,接下来我们在之前的基础上做扩展,实现对Druid多数据源的配置以及动态切换数据源. 问题:多数据源使用场景有哪些呢? 回答:在业务发展中, ...
- SpringBoot中mybatis配置多数据源
首先需要创建多个数据库 简单的user表 CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAU ...
- mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源
山石彦 | 作者 urlify.cn/vQzIne | 来源 最近工作中有用到双数据源,一个项目(中台)中需要操作两个不同的数据库.当时考虑到了两种方式, 1.通过http请求访问(A项目访问d1数据 ...
- 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解
该系列文章针对 Mybatis 3.5.1 版本 在上一篇文章中,谈到了 <environment> 标签解析会构建 Environment 对象,Environment 对象中有两个关键 ...
- mybatis 配置多数据源 java,SpringBoot+MyBatisPlus配置多数据源读写分离
首先呢,我们这里使用MySQL的数据库,可以简单配置一下主从备份来实现两个数据库的数据同步 项目的配置目录大概是这样的作为参考 第一步.定义一个枚举类声明当前的数据源类型 package com.yu ...
- spring mybatis 多数据源配置 jeesite 多数据源配置
spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...
最新文章
- 我国网络安全人才培养缺口巨大
- 公开仓库中Docker镜像的漏洞分析结果发布
- 开源网络备份软件bacula(安装bacula)
- Spring @Value注解无法正确赋值问题
- php bloginfo templatedirectory,WordPress函数:bloginfo(显示博客信息)
- 打印容器_3D打印:增材点阵结构在压力容器优化设计中的应用
- leetcode 1365. 有多少小于当前数字的数字(排序)
- 扩容是元素还是数组_Map扩容源码
- Android Camera调用流程
- 异构平台同步(Mysql到Oracle)
- Bootstrap公司年会抽奖活动代码
- 列表推导(list comprehension)--Python
- 数据库中的年月日表达
- 神仙工具!百度网盘资源一键转存阿里云盘,YYDS
- 自学c语言需要什么要求,学习c语言需要什么基础
- python如何表示正整数_python 正整数
- android最佳投屏,Android投屏神器(scrcpy使用教程)
- 魔兽世界服务器分组信息五区,魔兽世界服务器 魔兽世界国服所有大区的所有服务器名...
- 【Pygame实战】这游戏有毒,刷爆朋友圈:小编已与病毒版贪吃蛇大战了三百回合,最高分339?
- matlab自动变量名,matlab中如何自动给变量命名?