package com.zheng.common.db;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* 动态数据源(数据源切换)
* Created by ZhangShuzheng on 2017/1/15.
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
private final static Logger _log = LoggerFactory.getLogger(DynamicDataSource.class);
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
@Override
protected Object determineCurrentLookupKey() {
String dataSource = getDataSource();
_log.info("当前操作使用的数据源:{}", dataSource);
return dataSource;
}
/**
* 设置数据源
* @param dataSource
*/
public static void setDataSource(String dataSource) {
contextHolder.set(dataSource);
}
/**
* 获取数据源
* @return
*/
public static String getDataSource() {
String dataSource = contextHolder.get();
// 如果没有指定数据源,使用默认数据源
if (null == dataSource) {
DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getDefault());
}
return contextHolder.get();
}
/**
* 清除数据源
*/
public static void clearDataSource() {
contextHolder.remove();
}
}