spring mybatis 多个数据源配置

 mybatis生成器:http://blog.csdn.net/tolcf/article/details/50835165

通过命令生成:java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite

1.创建数据源名称枚举

public enum DataSources {
    MASTER, SLAVE
}

2.DataSourceTypeManager,具体执行数据切换

public class DataSourceTypeManager {
    private static final ThreadLocal<DataSources> dataSourceTypes = new ThreadLocal<DataSources>(){
            @Override  
            protected DataSources initialValue(){
                return DataSources.MASTER;
            }  
        };  
           
        public static DataSources get(){  
            return dataSourceTypes.get();  
        }  
           
        public static void set(DataSources dataSourceType){  
            dataSourceTypes.set(dataSourceType);  
        }  
           
        public static void reset(){  
            dataSourceTypes.set(DataSources.MASTER);
        }  
    }  

3.定义 ThreadLocalRountingDataSource,继承AbstractRoutingDataSource:

public class ThreadLocalRountingDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceTypeManager.get();
    }
}

4.配置数据源

<context:component-scan base-package="net.aazj.service,net.aazj.aop" />
<context:component-scan base-package="net.aazj.aop" />
<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:config/db.properties" />    
<!-- 配置数据源Master -->
<bean name="dataSourceMaster" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${jdbc_username}" />
    <property name="password" value="${jdbc_password}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="0" />
    <!-- 连接池最大使用连接数量 -->
    <property name="maxActive" value="20" />
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="20" />
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="0" />
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="60000" />
</bean>    
<!-- 配置数据源Slave -->
<bean name="dataSourceSlave" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="${jdbc_url_slave}" />
    <property name="username" value="${jdbc_username_slave}" />
    <property name="password" value="${jdbc_password_slave}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="0" />
    <!-- 连接池最大使用连接数量 -->
    <property name="maxActive" value="20" />
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="20" />
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="0" />
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="60000" />
</bean>    
<!-- 前面定义的class,填写完整路径-->
<bean id="dataSource" class="**.ThreadLocalRountingDataSource">
    <property name="defaultTargetDataSource" ref="dataSourceMaster" />
    <property name="targetDataSources">
        <map key-type="net.aazj.enums.DataSources">
            <entry key="MASTER" value-ref="dataSourceMaster"/>
            <entry key="SLAVE" value-ref="dataSourceSlave"/>
            <!-- 这里还可以加多个dataSource -->
        </map>
    </property>
</bean>    
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="configLocation" value="classpath:config/mybatis-config.xml" />
  <property name="mapperLocations" value="classpath*:config/mappers/**/*.xml" />
</bean>    
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>    
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="net.aazj.mapper" />
  <!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> -->
</bean>

原文地址:https://www.cnblogs.com/paisen/p/8313042.html