solution:
Multiple sets of sqlSessionFactory for different data sources
data source
<something-else-entirely> <proxool> <alias sinfulness</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. Method 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>
In this solution, *Mapper.xml needs to be sub-packaged according to different data sources, which is convenient for configuration. If the corresponding data sources of *Mapper.xml under the same package are different, it is inconvenient to use wildcards for unified scanning configuration, and sqlSessionFactory scans The basePackage of the package also needs to be subpackaged .
2. Use custom annotations to replace spring's repository settings in annotationClass. In this way, the corresponding annotations @PapRepository, @PeccancyRepository are injected into each mapper file
<property name="annotationClass" value="org.springframework.stereotype.Repository"></property>
改成<property name="annotationClass" value="net.xxx.PapRepository"></property>
The configuration file is as follows:
<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>
The mapper file that uses pap as configured above is annotated @PapRepository
public @interface PeccancyRepository { } public @interface PapRepository { }
// use dataSource_pap data source @PapRepository public interface UserMapper { List<User> find(UserQueryBean userQueryBean); } // use dataSource_peccancy data source @PeccancyRepository public interface ParameterMapper{ List<Parameter> find(ParameterQueryBean queryBean); }