解决方案:

多套sqlSessionFactory,针对不同的数据源

数据源

Xml代码

<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>

<propertyname="user"value="oses"/>

<propertyname="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>

<propertyname="user"value="pap"/>

<propertyname="password"value="pap"/>

</driver-properties>

...

</proxool>

</something-else-entirely>

1.方法一

Xml代码

<beanid="dataSource_peccancy"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<propertyname="driverClassName">

<value>org.logicalcobwebs.proxool.ProxoolDriver</value>

</property>

<propertyname="url">

<value>proxool.peccancy</value>

</property>

</bean>

<beanid="dataSource_pap"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<propertyname="driverClassName">

<value>org.logicalcobwebs.proxool.ProxoolDriver</value>

</property>

<propertyname="url">

<value>proxool.pap</value>

</property>

</bean>

Xml代码

<beanid="sqlSessionFactory_peccancy"class="org.mybatis.spring.SqlSessionFactoryBean">

<propertyname="dataSource"ref="dataSource_peccancy"/>

<propertyname="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>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<propertyname="basePackage"value="net.yhte.web.peccancy.**.dao"/>

<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory_peccancy"></property>

</bean>

<beanid="sqlSessionFactory_pap"class="org.mybatis.spring.SqlSessionFactoryBean">

<propertyname="dataSource"ref="dataSource_pap"/>

<propertyname="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>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<propertyname="basePackage"value="net.yhte.web.pap.**.dao"/>

<propertyname="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>

配置文件如下:

Xml代码

<beanid="sqlSessionFactory_peccancy"class="org.mybatis.spring.SqlSessionFactoryBean">

<propertyname="dataSource"ref="dataSource_peccancy"/>

<propertyname="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>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<propertyname="annotationClass"value="net.yhte.common.service.PeccancyRepository"></property>

<propertyname="basePackage"value="net.yhte.web.**.dao"/>

<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory_peccancy"></property>

</bean>

<beanid="sqlSessionFactory_pap"class="org.mybatis.spring.SqlSessionFactoryBean">

<propertyname="dataSource"ref="dataSource_pap"/>

<propertyname="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>

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<propertyname="annotationClass"value="net.yhte.common.service.PapRepository"></property>

<propertyname="basePackage"value="net.yhte.web.**.dao"/>

<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory_pap"></property>

</bean>

如上所配置使用pap的mapper文件就加上注解@PapRepository

Java代码

public@interfacePeccancyRepository{

}

public@interfacePapRepository{

}

Java代码

//使用dataSource_pap数据源

@PapRepository

publicinterfaceUserMapper{

List<User>find(UserQueryBeanuserQueryBean);

}

//使用dataSource_peccancy数据源

@PeccancyRepository

publicinterfaceParameterMapper{

List<Parameter>find(ParameterQueryBeanqueryBean);

}

获取【下载地址】

最主流的Java后台框架 springmvc spring mybatis SSM 项目源码