spring-mybatis配置多数据源

单数据源,就是创建一个连接池,然后在创建mybatis的SqlSessionFactoryBean时,指定这个数据源。

多数据源:创建多个连接池,将这多个连接池统一起来管理,通过key-value方式,我们在使用时指定哪个key,则使用哪个数据源,我们只需要继承spring帮我们写好的这个类。

package cn.fzq.ds;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * Created by Blossom on 2018/11/13.
 */
public class DbcontextHolder extends AbstractRoutingDataSource {

    public static final String DATASOURCE = "dataSource";
    public static final String DATASOURCE_DEMO = "dataSourceDemo";

    public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    /**
     * 设置当前数据源
     * @param dbType
     */
    public static void setDbType(String dbType){
        contextHolder.set(dbType);
    }
    /**
     * 获得当前数据源
     * @return
     */
    public static String getDbType(){
        String dbType = (String)contextHolder.get();
        return dbType;
    }
    /**
     *  清除上下文,remove掉我们此次设置的数据源,恢复到默认数据源
     */
    public static void clearContext(){
        contextHolder.remove();
    }
    @Override
    protected Object determineCurrentLookupKey() {
        return DbcontextHolder.getDbType();
    }
}
 <!-- 读取config.properties文件,配置连接池 -->
    <util:properties id="config" location="classpath:config.properties"/>

    <bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="#{config.classname}"/>
        <property name="url" value="#{config.url}"/>
        <property name="username"  value="#{config.username}"/>
        <property name="password" value="#{config.password}"/>
    </bean>

    <bean id="dataSourceDemo"  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="#{config.classname}"/>
        <property name="url" value="#{config.url}"/>
        <property name="username"  value="#{config.username_demo}"/>
        <property name="password" value="#{config.password_demo}"/>
    </bean>

    <bean id="dynamicDataSource" class="cn.fzq.ds.DbcontextHolder" >
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <!--通过不同的key决定用哪个dataSource-->
                <entry value-ref="dataSource" key="dataSource"></entry>
                <entry value-ref="dataSourceDemo" key="dataSourceDemo"></entry>
            </map>
        </property>
        <!--设置默认的dataSource-->
        <property name="defaultTargetDataSource" ref="dataSource">
        </property>
    </bean>
<!-- 配置SqlSessionFactoryBean -->
	<bean id="ssfb" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 指定连接池的位置 -->
		<property name="dataSource" ref="dynamicDataSource"/>
		<!-- 指定映射文件的位置 -->
		<property name="mapperLocations" value="classpath:cn/fzq/entity/*.xml"/>
	</bean>
	<!-- 配置MapperScannerConfigurer扫描 -->
	<!-- 指定映射器的位置 -->
	<bean id = "mapperScanner"  class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name = "basePackage"  value = "cn.fzq.dao"></property>
	</bean>

猜你喜欢

转载自blog.csdn.net/blossomfzq/article/details/84029019