Spring下mybatis配置多数据源

Spring Cloud + Mybatis 多数据源配置 项目开发中遇到缺陷,使用多数据源能避免分库间数据同步的步骤,在此记录配置步骤。 一、数据源自动配置禁用 1、将spring boot自带的DataSourceAutoConfiguration禁掉,防止自动配置数据源。在@SpringBootApplication注解中添加exclude属性即可。 2、添加注解@EnableTransactionManagement 并创建两个事务管理器 ... 阅读详情

原文链接:http://blog.zous-windows.com/archives/207.html



在使用spring+mybatis方式进行数据库持久化,需要在配置文件(我的配置文件名称为“spring-config-dao.xml”)中加入


<!– 数据库操作Session工厂 –>
<bean id=“sqlSessionFactory” class=“org.mybatis.spring.SqlSessionFactoryBean”>
<property name=“dataSource” ref=“dataSource” />
<property name=“configLocation” value=“classpath:mybatis/mybatis-config.xml” />
</bean>
但如果要增加一个数据源呢?正常理解,再加一个不就好了?

<!-- 数据库操作Session工厂 -->
<bean id="sqlSessionFactoryA" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
</bean>

<!-- 数据库操作Session工厂2 -->
<bean id="sqlSessionFactoryB" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2"></property>
<property name="configLocation" value="classpath:mybatis/mybatis-config-dos.xml"></property>
</bean>
但按照上述配置后,启动tomcat,却发现下列错误:

Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public final void org.mybatis.spring.support.SqlSessionDaoSupport.setSqlSessionFactory(org.apache.ibatis.session.SqlSessionFactory); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.apache.ibatis.session.SqlSessionFactory] is defined: expected single matching bean but found 2: [sqlSessionFactoryA, sqlSessionFactoryB]
分析:

这段话是说,SqlSessionFactory这个类必须是唯一的。但是现在发现两个:“sqlSessionFactoryA, sqlSessionFactoryB”。
那么如何才能使用两种或以上的数据源呢?经过一番搜索,发现我们的公共类BaseDao.java中,继承了SqlSessionDaoSupport。

public abstract class BaseDao<T extends Object> extends SqlSessionDaoSupport
而这个SqlSessionDaoSupport类中就有setSqlSessionFactory方法。源码如下:

@Autowired(required = false)
public final void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
if (!this.externalSqlSession) {
this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
}
}
于是上网搜索答案。终于,在国外网站上看到有人说可以用Qualifier来指定sqlSessionFactory。但没有给出具体方法,很是苦恼。

在经历无数次失败后,终于解决了问题。方法公布:

1、将原来BaseDao.java中继承的SqlSessionDaoSupport重写,命名为MySqlSessionDaoSupport:

package com.xx.icon.config.common.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.dao.support.DaoSupport;

import static org.springframework.util.Assert.notNull;

/**
* MyBatis数据源切换
* @author : zoutuo
* @version : 1.0
* @date : 14-3-27 下午3:57
*/
public class MySqlSessionDaoSupport extends DaoSupport {

private SqlSession sqlSession;

private boolean externalSqlSession;

@Autowired(required = false)
public final void setSqlSessionFactory(@Qualifier(“sqlSessionFactoryA”) SqlSessionFactory sqlSessionFactory) {
if (!this.externalSqlSession) {
this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
}
}

@Autowired(required = false)
public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSession = sqlSessionTemplate;
this.externalSqlSession = true;
}

/**
* Users should use this method to get a SqlSession to call its statement methods
* This is SqlSession is managed by spring. Users should not commit/rollback/close it
* because it will be automatically done.
*
* @return Spring managed thread safe SqlSession
*/
public final SqlSession getSqlSession() {
return this.sqlSession;
}

/**
* {@inheritDoc}
*/
protected void checkDaoConfig() {
notNull(this.sqlSession, “Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required”);
}
}
可以看到,上面的setSqlSessionFactory方法中增加了代码“@Qualifier(“sqlSessionFactoryA”)”。这就是说指定某个特定的Factory。

2、将原来的BaseDao.java中extend换为刚才创建的MySqlSessionDaoSupport

public abstract class BaseDao<T extends Object> extends MySqlSessionDaoSupport
3、新建MySqlSessionDaoSupport2,增加“@Qualifier(“sqlSessionFactoryB”)”

package com.xx.icon.config.common.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.dao.support.DaoSupport;

import static org.springframework.util.Assert.notNull;

/**
* MyBatis数据源切换
* @author : zoutuo
* @version : 1.0
* @date : 14-3-27 下午3:57
*/
public class MySqlSessionDaoSupport2 extends DaoSupport {

private SqlSession sqlSession;

private boolean externalSqlSession;

@Autowired(required = false)
public final void setSqlSessionFactory(@Qualifier(“sqlSessionFactoryB”) SqlSessionFactory sqlSessionFactory) {
if (!this.externalSqlSession) {
this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
}
}

@Autowired(required = false)
public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSession = sqlSessionTemplate;
this.externalSqlSession = true;
}

/**
* Users should use this method to get a SqlSession to call its statement methods
* This is SqlSession is managed by spring. Users should not commit/rollback/close it
* because it will be automatically done.
*
* @return Spring managed thread safe SqlSession
*/
public final SqlSession getSqlSession() {
return this.sqlSession;
}

/**
* {@inheritDoc}
*/
protected void checkDaoConfig() {
notNull(this.sqlSession, “Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required”);
}
}


至此,第二个数据源配置好了。在调用时,需要用到两个BaseDao。一个是继承MySqlSessionDaoSupport,另一个继承MySqlSessionDaoSupport2就可以了。

需要注意的是,这种方式的双数据源,需要两个BaseDao,两个MySqlSessionDaoSupport,两个mybatis-config.xml(文章最开始处spring-config-dao.xml中提到)。
Spring Boot MyBatis配置Druid多数据源,Java开发自学教程 千千万万要记得:多刷题!!多刷题!!之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!篇幅有限,以下只能截图分享部分的资源!!(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)(2)刷的算法题(还有左神的算法笔记)(3)面经+真题解析+对应的相关笔记(很全面)(4)视频学习(部分)ps:当你觉得学不进或者累了的时候,视频是个不错的选择在这里,最后只一句话:祝大家offer拿到手软!!一个人可以走的很快,但一群人才能走的更远。 阅读详情

相关推荐

谈一谈Spring-Mybatis在多数据源配置上的坑

概述 先聊一聊业务背景,随着系统服务的不断开发,我们的系统会充斥着各种个样的业务.这种时候,我们应该要开始考虑一下如何将系统的粒度细化.举个常见的例子: 电商系统可以拆分为 商品模块,订单模块,地址模块等等.这些模块都可以独立抽取出来,形成一个单独的服务.这就会涉及到各个模块之间的通信问题,一些简单的服务,我们可以通过rpc接口 直接进行通信,但是有些服务...

xingduan5153的博客 695

springMVC +mybites 中SqlSessionDaoSupport 的使用

使用spring注解的方式,使用 mybites 中的 SqlSessionDaoSupport   只是测试的例子,表中只有2个字段 1 。继承SqlSessionDaoSupport 的顶级dao 层代码  package com.inf.base; import java.sql.Connection; import java.util.List; import java.util.

u012481520的专栏 9920

Spring Boot整合MyBatis与Druid实现多数据源配置

在现代企业级Java应用开发中,随着业务规模的扩大和系统复杂度的提升,单一数据源已经无法满足系统的高可用性、性能以及数据隔离等需求。多数据源配置应运而生,旨在通过为不同业务模块或数据访问需求分配独立的数据源,从而实现数据库资源的合理分配与高效利用。多数据源通常适用于以下场景:读写分离:将读操作与写操作分配到不同的数据库实例,提升系统并发能力。数据隔离:不同业务模块使用不同数据库,降低耦合度,提升系统安全性。高可用与灾备:通过配置多个数据源实现故障切换,保障系统稳定性。

weixin_35762258的博客 1028

Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory

一、摘要 上两篇文章分别介绍了Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法 和 Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言),这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的。并且会简单的介绍下MyBatis整合Sprin...

weixin_34221773的博客 917

手把手教你用C语言给STM32写一个Modbus RTU从机库(含完整项目源码)

在工业自动化领域,Modbus RTU协议因其简单可靠的特点,成为RS485总线通信的事实标准。对于嵌入式开发者而言,为STM32等微控制器实现一个高效的Modbus RTU从机协议栈,是开发智能传感器、执行器等设备的必备技能。Modbus RTU从机的核心是一个状态机,需要处理帧接收、CRC校验、功能码解析和响应生成等环节。工业现场总会遇到意想不到的干扰情况,一个健壮的协议栈应该能够优雅地处理各种异常场景,而不是简单地崩溃或死锁。工业现场环境复杂,协议栈必须具备完善的异常处理机制。

weixin_30561425的博客 516

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 287

Mybatis 中如何通过SqlSessionDaoSupport来手动实现DAOis

文章目录MyBatis1. 前言2. 认识 SqlSessionDaoSupport3. BaseDaoImpl3.1 基于注解实现3.2基于xml配置3.3 加强 BaseDaoImpl3.4 创建BaseDaoImpl的实现类3.5 剩余代码补齐3.5.2 BaseDao3.5.2 UserDao3.5 UserMapper.xml4. 总结 MyBatis 1. 前言 在 MyBatis 中...

雨雾清影的个人博客 1846

链路监控pinpoint3.0.3安装部署(2)

本文详细介绍了Pinpoint 3.0.3分布式链路监控系统的安装部署过程。主要内容包括:1)数据库安装(HBase、MySQL、Redis、Pinot)的详细配置步骤;2)中间件Zookeeper和Kafka的安装;3)Pinpoint三大组件的部署:Collector、Web和Batch的配置文件修改和启动脚本。文章特别强调了使用-starter-exec.jar包的重要性,并提供了各组件所需的详细参数配置,包括数据库连接、Zookeeper地址、Kafka配置等关键信息。

zouzou_888的博客 1375

mybatis 使用SqlSessionDaoSupport批量插入

*/ public class batch  extends SqlSessionDaoSupport {   private static final Logger logger = Logger.getLogger(BaseDao.class); public SqlSessionFactory getNewuisSqlSessionFactory() { return ne

HG_weikaifang的博客 1452

微信小程序消息推送全攻略:从模板消息到订阅消息的实战避坑指南

本文深入解析微信小程序消息推送机制,对比模板消息、订阅消息与客服消息的核心差异与适用场景。重点提供订阅消息从用户授权设计、前端代码实现到后端稳定发送的完整实战指南,并分享提升消息点击率的文案与运营技巧,帮助开发者构建高效、用户友好的消息推送体系。

b3n4m5q6w7的博客 336

【TI毫米波雷达】IWR6843AOPEVM-G与DCA1000EVM实战:从硬件连接到数据流解析

本文详细解析了TI毫米波雷达开发套件IWR6843AOPEVM-G与DCA1000EVM的硬件连接、模式配置及数据流处理全流程。针对官方手册中的常见配置错误,提供了避坑指南和实测验证的正确设置方法,包括开关配置、网络参数等关键步骤。通过mmWave Studio软件配置雷达参数,并深入解析数据采集与处理流程,帮助开发者高效实现毫米波雷达应用开发。

weixin_30653023的博客 368

Mybatis dao 整合SqlSessionDaoSupport 以及Mybatisplus 对比

Mybatis dao 整合SqlSessionDaoSupport 以及Mybatisplus 对比

weixin_55583216的博客 363

电磁兼容(EMC)整改案例(七):EFT测试失败都是IC悬空引脚惹的祸

无论任何时候,为了避免这些问题,通常建议对悬空的IO口进行适当的配置,比如设置为强推挽输出低电平、输入带上拉或下拉电阻等,以减少外部电路对IO管脚状态的影响,并提高系统的稳定性和可靠性.

linkking27的博客 1032

Spring Boot mybatis-plus 多数据源配置

创建一个注解,用于在需要切换数据源的方法上进行标识。

专注于技术分享 1460

【PPS便携式移动电源】如何透彻了解便携式移动电源,仅需要十分钟阅读即可

PPS 便携式储能电源的发展前景广阔,受益于户外经济爆发、应急备灾需求提升及 “双碳” 政策支持,全球市场规模预计持续增长,2025 年出货量将达 2380 万台,未来将向大功率大容量、光充一体化、智能化方向发展,还会拓展家庭储能、移动医疗等新场景,同时钠离子电池应用、双向逆变技术升级将进一步推动行业发展。

昔时扬尘处 272

【Windows Server 2019】活动目录 (Active Directory) ——将计算机加入域和脱离域

博文介绍了如何将计算机加入AD域和脱离AD域,包括加入域,验证客户机加入到域后的信息,使用域账户用户在客户机上登录,使用本地账户用户在计算机上登录,脱离域。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 6169

Spring, MyBatis 多数据源的配置和管理

Spring, MyBatis 多数据源的配置和管理 同一个项目有时会涉及到多个数据库,也就是多数据源。多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发。比如在游戏开发中一个数据库是平台数据库,其它还有平台下的游戏对应的数据库; 2)两个或多个数据库是master-slave的关系,比如有mysql搭建一个 master-master,其后又带...

q309572960的博客 206

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring MVC +MyBatis 多数据源配置

配置文件 ${jdbc.t.driverClassName} ${jdbc.t.url} ${jdbc.t.username} ${jdbc.t.password}

Black Monkey 3745

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring+MyBatis多数据源配置实现

https://www.cnblogs.com/lzrabbit/p/3750803.html

ntotl的博客 426

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring+Mybatis实现多数据源连接的配置

Spring+Mybatis的中,如果要实现多数据源连接,在applicationContext.xml如下设置。 <context:property-placeholder location="classpath:config/jdbc.properties" ignore-unresolvable="true"/> <!-- Oracle数据源 --> &...

奋斗鱼 483

Spring Mybatis项目多数据源配置

项目中使用到了多种数据库,需要配置多数据源,网上解决办法多种,但看来看去感觉总有点不靠谱,主要自己对于Spring如何管理事务,抽象统一接口供JPA、Mybatis整合,于是再翻了翻Mybatis和Spring事务管理的源码,调试了一次开启事务的数据库访问流程,如下代码所示。

峰 757

【教程】Spring+Mybatis环境配置多数据源

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 一、简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功能。 二、代码详解 2.1 DataSourceConstants 数据源常量类 /** * 数据源名称常量类 *...

weixin_34304013的博客 112

spring+mybatis多数据源配置

话不多说,直接上代码+贴图。简单粗暴。 数据源配置文件: # 数据库连接驱动 driverClass=com.mysql.jdbc.Driver //-------------------basedb----------------------------------------------- # 数据库路径 basedb_jdbcUrl=jdbc:mysql://localhost:33

Z大钊 509

Spring Boot2 + mybatis、mybatis-plus多数据源配置

MyBatis多数据源配置 1.pom.xml 引入依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> ...

个人博客 4771

Spring Boot MyBatis配置Druid多数据源

上面代码配置了一个名为mysqldatasource的数据源,对应application.yml中spring.datasource.druid.mysql前缀配置的数据库。与此同时,还分别定了两个扫描路径PACKAGE和MAPPER_LOCATION,前者为Mysql数据库对应的mapper接口地址,后者为对应的mapper xml文件路径。在Spring Boot配置文件application.yml中配置多数据源和Spring Boot JdbcTemplate配置Druid多数据源一致。

wno704的博客 691
上一篇: Struts2报错There is no Action mapped for action name XXXX
小康师傅
博客等级 码龄16年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值