ssm多数据源配置

1.在.properties配置文件中 添加第二个数据源信息(type2,driver2,
  url2,username2,pawwword2)

 

2.修改spring-context.xml(src/main/resources/),有3处需要修改/添加
第一处,添加bean id="dataSource2"

 

第二处(spring-context.xml):修改为sqlSessionFactory bean,将dataSource改为dynamicDataSource

 

第三处 (spring-context.xml):修改为transactionManager bean
  同第二处一样 将ref="dataSource" 改为ref="dynamicDataSource"
  并添加 dynamicDataSource bean

 

3.添加DynamicDataSource.java

 

package com.thinkgem.wlw.common.db;

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

/**
 * 数据源切换方法类
 * @author zhouhe
 * @version 2018-11-7
 */
public class DynamicDataSource extends AbstractRoutingDataSource {
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();


    public static String getCurrentLookupKey() {
        return (String) contextHolder.get();
    }


    /**
     * 设置线程的数据源
     * @param currentLookupKey
     */
    public static void setCurrentLookupKey(String currentLookupKey) {
        contextHolder.set(currentLookupKey);
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return getCurrentLookupKey();
    }
}

 



4.在Controller中控制数据源

 在Controller中方法的开头用  DynamicDataSource.setCurrentLookupKey("dataSource2"); 来切换数据数据源,

这里要注意的是方法结束的时候要把数据源切换回来 DynamicDataSource.setCurrentLookupKey("dataSource");

否则会有问题。

 

注:这里说一下在jeesite中使用的话要有一点需要注意,就是在修改删除方法中切换数据源的话要在

Controller中的get();方法中加上 DynamicDataSource.setCurrentLookupKey("dataSource2");  因为在

执行修改,删除方法之前会先执行此方法。

这里要注意,切换数据源不能放到事务里面,否则会导致无法切换

还有一个问题,这里的数据源切换可能会出现数据库连接超时timeout现象,需要设置如下:

一:数据库连接加上 autoReconnect=true;(当数据库连接异常中断时,是否自动重新连接?)

二:mysql中my.ini文件添加(这里设置完需要重启mysql)

wait_timeout=31536000
interactive_timeout=31536000

 

posted @ 2018-11-07 10:00  农名工进城  阅读(450)  评论(0编辑  收藏  举报