1、创建Druid的单个数据源其实很容易实现
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(this.driverClassName);
ds.setUrl(this.url);
ds.setUsername(this.username);
ds.setPassword(this.password);
ds.init();
通过这些代码,可以创建一个DataSource,当然,ds还有其他的设置项;
2、既然要发片,当然得有多个DataSource,这样我们在for中创建多个且存于map中即可
HashMap map = new HashMap();
map.put("发片用的key",dataSource);
3、现在多个DataSource已经创建好了,接着我们应该创建一个基于创建的数据源map和实现DataSource接口的类
public class DataSources implements DataSource {
//这个是需要实现的方法
protected abstract DataSource getDataSource(){
return ?;
};
}
4、在DataSources中,我们提供一个设置发片的入口,且结果保存在当前线程中
public static final ThreadLocal<String> shardedCode = new ThreadLocal();
public static void setShardedCode(String shardedCode){
shardedCode.set(shardedCode);
}
5、这样我们的getDataSource方法可以如下实现
protected abstract DataSource getDataSource(){
String code = (String)shardedCode.get();
return map.get(code);
};
这样,就可以根据发片值获取到不同的数据源了