正常的逻辑高设多个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,其它的数据源类似。
然后就不会报错了。。。。。