spring mvc的多数据源配置

项目要用到从两个不同url的数据库查值,基于mybatis,用法记录一下:

#######################1数据源#######################
outdata.driverClass=com.mysql.jdbc.Driver
outdata.url=jdbc:mysql://********/outdata?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
outdata.username=root
outdata.password=***********

#######################2数据源#######################
jst.driverClass=com.mysql.jdbc.Driver
jst.url=jdbc:mysql:/*****/jst_sys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
jst.username=****
jst.password=*******************

bean配置:

    <!-- 参数配置 -->
    <!--<context:property-placeholder ignore-resource-not-found="true" location="classpath:*.properties" order="0"/>-->

    <!--start 数据库数据源配置outdata -->
    <tx:annotation-driven transaction-manager="masterTransactionManager"/>
    <bean id="outdataDataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${outdata.driverClass}"></property>
        <property name="url" value="${outdata.url}"></property>
        <property name="username" value="${outdata.username}"></property>
        <property name="password" value="${outdata.password}"></property>
        <property name="initialSize" value="${initialSize}"/>
        <property name="maxActive" value="${maxActive}"></property>
        <property name="maxIdle" value="${maxIdle}"></property>
        <property name="minIdle" value="${minIdle}"></property>
        <property name="maxWait" value="${maxWait}"></property>
        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"></property>
        <property name="numTestsPerEvictionRun" value="${numTestsPerEvictionRun}"></property>
        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"></property>
        <property name="removeAbandoned" value="${removeAbandoned}"></property>
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"></property>
        <property name="testOnBorrow" value="${testOnBorrow}"></property>
        <property name="validationQuery">
            <value>SELECT 1 FROM DUAL</value>
        </property>
    </bean>

    <!--start 数据库数据源配置jst -->
    <bean id="jstDataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${jst.driverClass}"></property>
        <property name="url" value="${jst.url}"></property>
        <property name="username" value="${jst.username}"></property>
        <property name="password" value="${jst.password}"></property>
        <property name="initialSize" value="${initialSize}"/>
        <property name="maxActive" value="${maxActive}"></property>
        <property name="maxIdle" value="${maxIdle}"></property>
        <property name="minIdle" value="${minIdle}"></property>
        <property name="maxWait" value="${maxWait}"></property>
        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"></property>
        <property name="numTestsPerEvictionRun" value="${numTestsPerEvictionRun}"></property>
        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"></property>
        <property name="removeAbandoned" value="${removeAbandoned}"></property>
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"></property>
        <property name="testOnBorrow" value="${testOnBorrow}"></property>
        <property name="validationQuery">
            <value>SELECT 1 FROM DUAL</value>
        </property>
    </bean>

    <bean id="dataSource" class="com.jd.data.util.DatabaseContextHolder">
        <property name="defaultTargetDataSource" ref="outdataDataSource"/>
        <property name="targetDataSources">
            <map>
                <entry key="outdataDataSource" value-ref="outdataDataSource"/>
                <entry key="jstDataSource" value-ref="jstDataSource"/>
            </map>
        </property>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:spring/sqlmap-config.xml"></property>
        <property name="configurationProperties">
            <props>
                <prop key="cacheEnabled">true</prop>
                <prop key="lazyLoadingEnabled">true</prop>
                <prop key="aggressiveLazyLoading">false</prop>
                <prop key="multipleResultSetsEnabled">true</prop>
                <prop key="useColumnLabel">true</prop>
                <prop key="useGeneratedKeys">true</prop>
                <prop key="autoMappingBehavior">FULL</prop>
                <prop key="defaultExecutorType">BATCH</prop>
                <prop key="defaultStatementTimeout">25000</prop>
            </props>
        </property>
    </bean>
    <bean id="masterTransactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    <!--end 数据库数据源配置ad_advertisers -->

java的工具类:

package com.jd.data.util;

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

public class DatabaseContextHolder extends AbstractRoutingDataSource{

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

    public static void setSelectedDatabase(String databaseName){
        contextHolder.set(databaseName);
    }
    public static String getSelectedDatabase(){
        String databaseName= (String)contextHolder.get();
        return databaseName;
    }
    public void clearContext(){
        contextHolder.remove();
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return DatabaseContextHolder.getSelectedDatabase();
    }
}

调用时候指明数据库:

public int insert(OutLogInfo outLogInfo) {
        DatabaseContextHolder.setSelectedDatabase("outdataDataSource");
        return outLogInfoManageDao.insert(outLogInfo);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值