spring mybatis多数据源 对应不同包

spring | 2019-09-13 10:02:39

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来扫描不同的包。不同的包单独操作不同的数据库。

登录后即可回复 登录 | 注册
    
关注编程学问公众号