spring mybatis多数据源很简单,原来配置的一个数据源,你加一个数据源就可以了,然后不同的数据源扫描不同的包,那么不同包的代码就用的不同的数据源了,这种静态多数据源,不适用动态切换,动态切换需要使用AbstractRoutingDataSource,这里只是多数据源 对应不同包扫描的方法。
<!-- master数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations"> <list> <value>classpath*:com/ajia/cms/synchronize/entity/mapper/*Mapper.xml </value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ajia.cms.synchronize.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- slave数据源 --> <bean id="dataSourceDatacenter" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${datacenter.jdbc.driver}" /> <property name="url" value="${datacenter.jdbc.url}" /> <property name="username" value="${datacenter.jdbc.user}" /> <property name="password" value="${datacenter.jdbc.password}" /> </bean> <bean id="sqlSessionFactoryDatacenter" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSourceDatacenter" /> <property name="mapperLocations"> <list> <value>classpath*:com/ajia/cms/synchronize/datacenterDao/mapper/*Mapper.xml </value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ajia.cms.synchronize.datacenterDao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryDatacenter" /> </bean> <!-- 声明式事务 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> <property name="dataSource" ref="dataSourceDatacenter" /> </bean>
原理就是用不同的SqlSessionFactoryBean来扫描不同的包。不同的包单独操作不同的数据库。