同一applicationContext.xml中:
1,配置多个数据源(采用连接池c3p0,直接jdbc连也行)
数据源1:dataSource1
...
...
数据源2:dataSource2
...
...
2, 配置mybatis数据会话管理(sqlSessionFactoryBean)
会话factory1:sqlSessionFactoryBean1
//不同factory,尽量保持其mapper的路径不同
会话factory2:sqlSessionFactoryBean2
3, 配置Dao接口层(重点注意)
mybatis用mapperScannerConfigurer扫描相关的dao(或mapper)的interface的包,将其注入到spring进行管理;
dao层需要注入第2步配置的sessionFactory来获得session(session中加入事物等操作),跟sessionFactory中配置的*Mapper.xml进行一一匹配;
mapperScanner1:
//不同数据源的扫描dao层不要放在一起,不然数据源1扫描了数据源2的dao,那 去数据源1的mappe.xml中匹配时,会找不到相应方法,而报错!!!
mapperScanner2:
其他配置:事物配置(dataSourceTransactionManager),持久化模板(SqlSessionTemplate)
No unique bean of type [org.apache.ibatis.sessioin.SqlSessionFactory] is defined:expected single matching bean but found 2:[sqlSessionFactoryBean1,sqlSessionFactoryBean2]
解决问题:检查步骤3配置,是否有配置sqlSessionFactoryBeanName
常见错误2:
...Dao conflicts with existing, non-compatible bean definition of same name and class[org.mybatis.spring.mapper.MapperFactoryBean]
解决问题:检查步骤3配置,属性basePackage,两个数据源是否扫描了同一dao层包,若是,更改dao层包,不同数据源需扫描不同的dao层包。
参考:http://stackoverflow.com/questions/4746766/spring-and-mybatis-multiple-data-sources-setup