mybatis 连接多个库(Spring MVC)

1.修改数据库配置database.properties文件

jdbc.url=jdbc:mysql://localhost:3306/hippo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.jdbc.Driver


a.jdbc.url=jdbc:mysql://localhost:3306/hippo_auth?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
a.jdbc.username=root
a.jdbc.password=root
a.jdbc.driver=com.mysql.jdbc.Driver

2. 修改mybatis配置 applicationContext.xml文件

<bean id="aDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${a.jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    </bean>

  <bean id="bDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    </bean>
     <!-- 动态数据源,**.**.**.DatabaseContextHolder 屏蔽了包名,为具体选择数据库的类 -->
    <bean id="dynamicDataSource" class="**.**.**.DatabaseContextHolder">
        <property name="defaultTargetDataSource" ref="aDataSource"/>
        <property name="targetDataSources">
            <map>
                <entry key="aDataSource" value-ref="aDataSource"/>
                <entry key="bDataSource" value-ref="bDataSource"/>
            </map>
        </property>
    </bean>
  <!--重点sqlSessionFactory的数据源配置项填写为动态数据源-->   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">   <property name="dataSource" ref="dynamicDataSource"/>   <property name="typeAliasesPackage" value="com.mininglamp.hippo.db.model"/>    <property name="configLocation" value="classpath:mybatis-mapper-config.xml"/>    <property name="mapperLocations" value="classpath*:mapper/*.xml" />   </bean>

3.创建类DbcontextHolder

public class DbcontextHolder extends AbstractRoutingDataSource {

    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;
    }
    /**
     *清除上下文
     *
     */
    public void clearContext(){
        contextHolder.remove();
    }
    @Override
    protected Object determineCurrentLookupKey() {
        return DbcontextHolder.getDbType();
    }
}

4.在方法中连接不同数据库

//连接bDataSource进行查询
DbcontextHolder.setDbType("bDataSource");
Template template = templateMapperExtend.selectByPrimaryKey(templateId);
//连接aDataSource进行插入
DbcontextHolder.setDbType("aDataSource");
siteAsyncMapper.insertSelective(siteAsync);

5.参考

https://blog.csdn.net/u010716879/article/details/78459529

posted @ 2020-09-07 16:09  -小月半子-  阅读(422)  评论(0)    收藏  举报