spring+mybatis配置多数据源
2016-07-16 10:41
393 查看
之前所在的公司用的是自己定制的多数据源支持框架,所以对这方面一直没有过多的追究,最近偶然碰到这个问题,在网上查了一些资料,试过好多个版本,一直没有成功,知道昨天看到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接口
<?xml version="1.0" encoding="UTF-8"?> classpath:system.properties
下面对配置进行一个简单的说明和补充
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接口
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- Mybatis传递多个参数的解决办法(三种)
- 获取Java的MyBatis框架项目中的SqlSession的方法
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- Mybatis逆工程jar包的修改和打包
- 深入浅析mybatis oracle BLOB类型字段保存与读取
- Java利用Sping框架编写RPC远程过程调用服务的教程
- springmvc 发送ajax出现中文乱码的解决方法汇总