解决方案:
多套sqlSessionFactory,针对不同的数据源
数据源
<something-else-entirely> <proxool> <alias>peccancy</alias> <driver-url>jdbc:oracle:thin:@172.16.60.46:1521:orcl</driver-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <driver-properties> <property name="user" value="oses"/> <property name="password" value="oses"/> </driver-properties> ... </proxool> <proxool> <alias>yhtepap</alias> <driver-url>jdbc:oracle:thin:@172.16.60.46:1521:orcl</driver-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <driver-properties> <property name="user" value="pap"/> <property name="password" value="pap"/> </driver-properties> ... </proxool> </something-else-entirely>
1.方法一
<bean id="dataSource_peccancy" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName"> <value>org.logicalcobwebs.proxool.ProxoolDriver</value> </property> <property name="url"> <value>proxool.peccancy</value> </property> </bean> <bean id="dataSource_pap" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName"> <value>org.logicalcobwebs.proxool.ProxoolDriver</value> </property> <property name="url"> <value>proxool.pap</value> </property> </bean>
<bean id="sqlSessionFactory_peccancy" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_peccancy" /> <property name="mapperLocations"> <list> <value>classpath:net/yhte/common/query/mapper/PageData_Mapper.xml</value> <value>classpath*:net/yhte/web/peccancy/**/mapper/*Mapper.xml</value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="net.yhte.web.peccancy.**.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_peccancy"></property> </bean> <bean id="sqlSessionFactory_pap" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_pap" /> <property name="mapperLocations"> <list> <value>classpath*:net/yhte/web/pap/**/mapper/*Mapper.xml</value> <value>classpath:net/yhte/common/query/mapper/PageData_Mapper.xml</value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="net.yhte.web.pap.**.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_pap"></property> </bean>
本方案需要根据数据源的不同对*Mapper.xml进行分包处理,便于配置,同一个包下的*Mapper.xml如果对应的数据源不同,则不方便使用通配符进行统一扫描配置,且sqlSessionFactory扫包的basePackage 也需要分包。
2.使用自定义注解来取代spring的repository设置到annotationClass中。这样每个mapper文件中注入相应的注解@PapRepository,@PeccancyRepository
<property name="annotationClass" value="org.springframework.stereotype.Repository"></property>
改成<property name="annotationClass" value="net.xxx.PapRepository"></property>
配置文件如下:
<bean id="sqlSessionFactory_peccancy" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_peccancy" /> <property name="mapperLocations"> <list> <value>classpath:net/yhte/common/query/mapper/PageData_Mapper.xml</value> <value>classpath*:net/yhte/web/**/mapper/*Mapper.xml</value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="annotationClass" value="net.yhte.common.service.PeccancyRepository"></property> <property name="basePackage" value="net.yhte.web.**.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_peccancy"></property> </bean> <bean id="sqlSessionFactory_pap" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_pap" /> <property name="mapperLocations"> <list> <value>classpath:net/yhte/common/query/mapper/PageData_Mapper.xml</value> <value>classpath*:net/yhte/web/**/mapper/*Mapper.xml</value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="annotationClass" value="net.yhte.common.service.PapRepository"></property> <property name="basePackage" value="net.yhte.web.**.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_pap"></property> </bean>
如上所配置使用pap的mapper文件就加上注解@PapRepository
public @interface PeccancyRepository { } public @interface PapRepository { }
// 使用dataSource_pap 数据源 @PapRepository public interface UserMapper { List<User> find(UserQueryBean userQueryBean); } // 使用dataSource_peccancy 数据源 @PeccancyRepository public interface ParameterMapper{ List<Parameter> find(ParameterQueryBean queryBean); }
相关推荐
SSM(Spring+SpringMVC+MyBatis)多数据源配置框架,精简版
springboot+mybatis双数据源配置及事务处理
多数据源配置,使用了数据库连接池,并且是多数据源,分也不要多了,2分,有什么疑问可以指出,或者不足也可以一起学习
Spring+SpringMVC+Mybatis多数据源整合。基于spring3.0和mybatis3.2的
技术架构:springboot2.0 + mybatis + druid, 数据库:Oracle,Mysql 数据库分离调试,针对不同数据库情况
NULL 博文链接:https://bijian1013.iteye.com/blog/2435610
NULL 博文链接:https://zhuchengzzcc.iteye.com/blog/1827633
springboot+druid+mybatis多数据源动态切换,基于sql类型完成读写分离操作
spring+springmvc+mybatis多数据源.
springboot + mybatis(通用mapper) + HikariCP(比durid更快)多数据源,从此单表的xml文件和crud就不需要自己写了
spring+mybatis 多个数据源调用示例
spring+SpringMVC+MyBatis之配置多数据源
springboot+mybatis多数据源配置整合。一个最简单的测试用例。实现了数据库数据处理及springboot多数据源问题。亲测
Spring+SpringMVC+Mybatis多数据源整合,修改相关配置可以直接使用。
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。 此项目就是为了解决这个问题。
spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...
本套源代码实现了Spring 和 mybatis 和 layui 集成情况下的基础操作,包括: 增删改查、分页、导入导出等功能。数据库为mysql,脚本在源代码根目录下,mybatis_crud.sql
spring+mybatis 数据路由JAR包,实现事物级控制,读写库多次分离,非cloud 配置中心。
springboot + mybatis-plus + database+ 多数据源 + redis + hutool 框架干净,没有其他冗余的成分; 配置了MP的代码生成器,意见生成代码,节省开发时间! 可用于各种定时任务处理,各种夸库操作, 多数据源支持...