Spring +driuid 动态切换数据源,数据源连接池使用druid 其他的数据源原理基本相同
spring中配置默认数据源连接池如下:
接下来在spring-context.xml中配置多数据源bean,
这个类 com.XXX.datasource.DynamicDataSource 需要手动创建重写了spring管理数据源的方法
import java.sql.DriverManager;
import java.util.Map;
import java.util.Set;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.util.StringUtils;
/**
* @author zh
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
private boolean debug = false;
Logger log = LoggerFactory.getLogger(this.getClass());
private Map dynamicTargetDataSources;
private Object dynamicDefaultTargetDataSource;
@Override
protected Object determineCurrentLookupKey() {
String datasource = DBContextHolder.getDataSource();
if (debug) {
if (StringUtils.isEmpty(datasource)) {
log.info("---当前数据源:默认数据源---");
} else {
log.info("---当前数据源:" + datasource + "---");
}
}
return datasource;
}
@Override
public void setTargetDataSources(Map targetDataSources) {
super.setTargetDataSources(targetDataSources);
this.dynamicTargetDataSources = targetDataSources;
}
// 创建数据源
pu