SpringMVC多数据源动态加载切换

标签:
多数据源spring |
分类: Java/Spring/Mysql |
最近在做SpringMVC相关的开发,遇到多个数据源的问题,研究了很久终于解决了。初步有两个方案:
(1)在配置文件里配置好所有的数据源,在需要的时候根绝数据源的名字动态切换。无疑这样做是可行的,如果数据源不经常变化或者数据源较少的话,可以采取这样的策略。
(2)在程序中根据需要动态的创建数据源,并切换。这样想法是最优的,难度也比较大。
在此主要记录了第二中方案的一些做法:
1.首先在applicationContext.xml文件中添加:
2.然后编写数据源的切换:
public final class Dbs {
private
static final ThreadLocal local = new ThreadLocal();
public
static String getDbType(){
return
local.get();
}
public
static void setDbType(String dbName){
local.set(dbName);
}
public
static void clear(){
local.remove();
}
}
3.编写一个动态的数据源完成创建切换数据源的任务:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Logger;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource
{
private
Logger log = Logger.getLogger(this.getClass());
private Map
(1)在配置文件里配置好所有的数据源,在需要的时候根绝数据源的名字动态切换。无疑这样做是可行的,如果数据源不经常变化或者数据源较少的话,可以采取这样的策略。
(2)在程序中根据需要动态的创建数据源,并切换。这样想法是最优的,难度也比较大。
在此主要记录了第二中方案的一些做法:
1.首先在applicationContext.xml文件中添加:
2.然后编写数据源的切换:
public final class Dbs {
}
3.编写一个动态的数据源完成创建切换数据源的任务:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Logger;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSourc
public class DynamicDataSource extends AbstractRoutingDataSourc