zoukankan      html  css  js  c++  java
  • springmvc +mybatis 配置多数据源

    1.数据源配置:

    jdbc_multiple.properties:

    # MySQL
    #============================================================================
    jdbc.mysql.driver=com.mysql.jdbc.Driver
    jdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
    jdbc.mysql.username=root
    jdbc.mysql.password=root
    # MS SQL Server (JTDS)
    #============================================================================
    jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driver
    jdbc.sqlserver.url=jdbc:jtds:sqlserver://127.0.0.1:1433/test
    jdbc.sqlserver.username=sa
    jdbc.sqlserver.password=sa
    
    # 通用配置
    #============================================================================
    jdbc.initialSize=5
    jdbc.minIdle=5
    jdbc.maxIdle=20
    jdbc.maxActive=100
    jdbc.maxWait=100000

     2.spring-mybatis.xml配置:

      

    <context:component-scan base-package="xxx" >
            <!-- spring 自动扫描注解的时候,不去扫描@Controller -->
            <context:exclude-filter type ="annotation" expression= "org.springframework.stereotype.Controller" />
        </context:component-scan>
    
     <context:property-placeholder location="classpath:conf/jdbc_multiple.properties" />
               
        <!-- 多数据源配置 -->
        <bean id="sqlServerDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.sqlserver.driver}"/>
            <property name="url" value="${jdbc.sqlserver.url}"/>
            <property name="username" value="${jdbc.sqlserver.username}"/>
            <property name="password" value="${jdbc.sqlserver.password}"/>
            <property name="initialSize" value="${jdbc.initialSize}"/>
            <property name="minIdle" value="${jdbc.minIdle}"/>
            <property name="maxIdle" value="${jdbc.maxIdle}"/>
            <property name="maxActive" value="${jdbc.maxActive}"/>
            <property name="maxWait" value="${jdbc.maxWait}"/>
            <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
            <property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
            <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
            <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
            <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
            <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"/>
            <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
        </bean>
        <bean id="mySqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.mysql.driver}"/>
            <property name="url" value="${jdbc.mysql.url}"/>
            <property name="username" value="${jdbc.mysql.username}"/>
            <property name="password" value="${jdbc.mysql.password}"/>
            <property name="initialSize" value="${jdbc.initialSize}"/>
            <property name="minIdle" value="${jdbc.minIdle}"/>
            <property name="maxIdle" value="${jdbc.maxIdle}"/>
            <property name="maxActive" value="${jdbc.maxActive}"/>
            <property name="maxWait" value="${jdbc.maxWait}"/>
            <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
            <property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
            <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
            <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
            <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
            <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"/>
            <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
        </bean>
                        
        <bean id="dataSource" class="xxxx.DbcontextHolder"><!-- 这里写选择数据源的类地址 下面跟着给出-->
            <property name="defaultTargetDataSource" ref="mySqlDataSource"/><!-- 设置默认为此mySqlDataSource数据源-->
            <property name="targetDataSources">
                <map>
                    <entry key="mySqlDataSource" value-ref="mySqlDataSource"/>
                    <entry key="sqlServerDataSource" value-ref="sqlServerDataSource"/>
                </map>
            </property>
        </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.使用方式:当你需要进行crud等数据库操作的之前 设置你需要使用的数据源即可

    例: 

    @Transactional
        public void  findOrder(){
             List<PayOrder> list = new ArrayList<>();
             DbcontextHolder.setDbType("sqlServerDataSource");//设置后 就OK
             list =mapper.findByUid("-14663");
             System.out.println(list);
        }
  • 相关阅读:
    JSP详细解析
    JSP详细解析
    JAVA设计模式之单例模式
    JAVA设计模式之单例模式
    SQLite – GLOB子句
    HEXO进阶打赏
    python常用模块
    猫头鹰的深夜翻译:核心JAVA并发一
    标准规范
    题解 P1951 【收费站_NOI导刊2009提高(2)】
  • 原文地址:https://www.cnblogs.com/AmbitiousMice/p/6027674.html
Copyright © 2011-2022 走看看