spring+mybatis配置多数据源

来源:互联网 发布:vm虚拟机网络连接 编辑:程序博客网 时间:2024/05/28 22:12
              之前所在的公司用的是自己定制的多数据源支持框架,所以对这方面一直没有过多的追究,最近偶然碰到这个问题,在网上查了一些资料,试过好多个版本,一直没有成功,知道昨天看到org.mybatis.spring.mapper.MapperScannerConfigurer的markerInterface属性才恍然大悟,这个刚好解决了我的问题,顺着之前的一些摸索,勉强把功能给凑起来了


     下面对配置进行一个简单的说明和补充

      1、数据源配置:dataSource_manage 和 dataSource_business,对于业内人士应该不需要多解释,大家都懂的;

      2、sqlSessionFactory配置

         (1)属性dataSource,指向对应的数据源,即上面的dataSource_manage或dataSource_business

         (2)属性mapperLocations,指定mapper.xml所在的位置,支持正则表达式

 

          在这里我们注意到,两个sqlSessionFactory都配置了相同的mapperLocations,会不会出现混淆呢,显然是不会的,看下面的说明

  3、MapperScannerConfigurer配置(org.mybatis.spring.mapper.MapperScannerConfigurer)

         (1)属性sqlSessionFactoryBeanName,指向上面配置的sqlSessionFactory1和sqlSessionFactory2。需要注意的是MapperScannerConfigurer中还有一个

类似的属性sqlSessionFactory,这个属性一般这样配置

            <property name="sqlSessionFactory"   ref="sqlSessionFactory1" />

           但在加载时会报错,提示数据源的相关配置${manage.jdbc.driverClassName}都找不到,这是因为sqlSessionFactory会在system.properties资源之前先加载,导致

无法识别${xxx}中的值,至于具体原因,有待研究

        (2)属性basePackage,指定接口Mapper.java所在的包路径

        (3)属性markerInterface,个人认为这个属性是最关键的,之前照网上的配置试过很多次都失败了,就是因为没有用到它。该属性对应的是我们自定义的接口,以下图为例,只要是实现了ManagementMapper.java的Mapper,都使用sqlSessionFactory1,即全部使用数据源dataSource_manage,这样就根据不同的markerInterface实现区别了不同数据源的使用。



JcMySubscribeMapper和JcMySubscribeMapper继承了ManagementMapper接口

TsTaskMapper、TsTaskReplyMapper和TsTaskUserMapper继承了BusinessMapper接口



0 0
原创粉丝点击