博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC+mybatis配置多数据源
阅读量:4569 次
发布时间:2019-06-08

本文共 4243 字,大约阅读时间需要 14 分钟。

正常的逻辑高设多个dataSource,并注入相应的dao,dao注入相应的mapping.

jdbc.properties

mypt.url=jdbc:mysql://192.168.1.42:3306/epi_ningxia_utf8_test?useUnicode=true&allowMultiQueries=true&characterEncoding=utf8&characterSetResults=utf8&useOldAliasMetadataBehavior=truemypt.username=samypt.password=123456qzj.url=jdbc:mysql://192.168.1.42:3306/epi_ningxia_qzj?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useOldAliasMetadataBehavior=trueqzj.username=saqzj.password=123456jdbc.driver=com.mysql.jdbc.Driverjdbc.initialSize=10jdbc.maxActive=30jdbc.maxIdle=5jdbc.minIdle=1jdbc.maxWait=2000

spring-mybatis.xml

我觉得这样已经差不多,网上大部分的资料也是这么配置的,但这边会有一直报一个错,

严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.shensu.common.connect.sql.SqlMapSupport.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: [qzj_sqlSessionFactory, mypt_sqlSessionFactory]

意思是

SqlSessionFactory应该只有一个,但有两个所以报错。

后来查看了资料,我们的dao会继承DaoSupport,但DaoSupport只能配一个SqlSessionFactory,所以这边我们要分重写,各自的数据源拥有各自的DaoSupport。

重写如下:

package com.shensu.common.connect.sql;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;public class QZJSqlSessionDaoSupport extends DaoSupport{    private SqlSession sqlSession;         private boolean externalSqlSession;     @Autowired(required = false)    public final void setSqlSessionFactory(@Qualifier("qzj_sqlSessionFactory") 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;    }     @Override    protected void checkDaoConfig() throws IllegalArgumentException {        System.out.println("Property ‘qzj_sqlSessionFactory’ or ‘qzj_sqlSessionFactory’ are required");        //notNull(this.sqlSession, "Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required");    }}

然后dao继承这个QZJSqlSessionDaoSupport,其它的数据源类似。

然后就不会报错了。。。。。

转载于:https://www.cnblogs.com/wuxiaojuan/p/11308644.html

你可能感兴趣的文章
[BZOJ4012] [HNOI2015]开店
查看>>
iOS5新开发的API总述——WWDC 2011
查看>>
JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构...
查看>>
基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
查看>>
Multicast Routing
查看>>
java NIO中的buffer和channel
查看>>
使用JRegistry来操作window系统注册表
查看>>
函数递归,算法之二分法,表达式,生成式,匿名函数及常用内置函数
查看>>
Nginx,uWSGI与Django 应用的关系
查看>>
Html显示地图
查看>>
MySQL索引选择问题(要相信MySQL自己选择索引的能力)
查看>>
Angular i18n
查看>>
1104文法分析
查看>>
常见adb命令
查看>>
Python03(Linux和Python简介)
查看>>
matlab基本指令
查看>>
万能指针 void*
查看>>
对装饰模式(Decorator)的解读
查看>>
SQL Server 2008 教程
查看>>
docker安装
查看>>