SSM配置多数据源

来源:互联网 发布:it认证培训班 编辑:程序博客网 时间:2024/06/08 07:49

A:创建多份配置,文件参考网址 http://www.cnblogs.com/banma/p/6797579.html

B:动态调用方法,设置数据源参考网址 https://www.cnblogs.com/AmbitiousMice/p/6027674.html

1.数据源配置:

jdbc_multiple.properties:

复制代码
# MySQL#============================================================================jdbc.mysql.driver=com.mysql.jdbc.Driverjdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=truejdbc.mysql.username=rootjdbc.mysql.password=root# MS SQL Server (JTDS)#============================================================================jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driverjdbc.sqlserver.url=jdbc:jtds:sqlserver://127.0.0.1:1433/testjdbc.sqlserver.username=sajdbc.sqlserver.password=sa# 通用配置#============================================================================jdbc.initialSize=5jdbc.minIdle=5jdbc.maxIdle=20jdbc.maxActive=100jdbc.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);    }
复制代码

1.数据源配置:

jdbc_multiple.properties:

复制代码
# MySQL#============================================================================jdbc.mysql.driver=com.mysql.jdbc.Driverjdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=truejdbc.mysql.username=rootjdbc.mysql.password=root# MS SQL Server (JTDS)#============================================================================jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driverjdbc.sqlserver.url=jdbc:jtds:sqlserver://127.0.0.1:1433/testjdbc.sqlserver.username=sajdbc.sqlserver.password=sa# 通用配置#============================================================================jdbc.initialSize=5jdbc.minIdle=5jdbc.maxIdle=20jdbc.maxActive=100jdbc.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);    }
复制代码

1.数据源配置:

jdbc_multiple.properties:

复制代码
# MySQL#============================================================================jdbc.mysql.driver=com.mysql.jdbc.Driverjdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=truejdbc.mysql.username=rootjdbc.mysql.password=root# MS SQL Server (JTDS)#============================================================================jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driverjdbc.sqlserver.url=jdbc:jtds:sqlserver://127.0.0.1:1433/testjdbc.sqlserver.username=sajdbc.sqlserver.password=sa# 通用配置#============================================================================jdbc.initialSize=5jdbc.minIdle=5jdbc.maxIdle=20jdbc.maxActive=100jdbc.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);    }
复制代码

1.数据源配置:

jdbc_multiple.properties:

复制代码
# MySQL#============================================================================jdbc.mysql.driver=com.mysql.jdbc.Driverjdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=truejdbc.mysql.username=rootjdbc.mysql.password=root# MS SQL Server (JTDS)#============================================================================jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driverjdbc.sqlserver.url=jdbc:jtds:sqlserver://127.0.0.1:1433/testjdbc.sqlserver.username=sajdbc.sqlserver.password=sa# 通用配置#============================================================================jdbc.initialSize=5jdbc.minIdle=5jdbc.maxIdle=20jdbc.maxActive=100jdbc.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);    }
复制代码
原创粉丝点击