MyCat实现多租户时使用ThreadLoacl碰到的问题

Java学习录 发布于 2017/10/20 14:45
阅读 298
收藏 1

使用mycat实现多租户为每个用户分表时,我想用ThreadLoacl来保存每个用户对应的数据库下面是我的Threadlocal工具类
public class ThreadLocalUtil {
private static ThreadLocal tenanThreadLocal;
private static ThreadLocal getThreadLocal(){
if(tenanThreadLocal==null){
synchronized(ThreadLocalUtil.class){
if(tenanThreadLocal==null){
tenanThreadLocal =new ThreadLocal<>();
}
}}
return tenanThreadLocal;
}
public static synchronized void setTenant(String scheme) {
getThreadLocal().set(scheme);
}
public static final synchronized String getTenant() {
if(getThreadLocal().get()==null){
synchronized(ThreadLocalUtil.class){
if(getThreadLocal().get()==null){
return "TESTDB";
}
}
}
return getThreadLocal().get().toString();
}
}

但是我在获取到用户对应的scheme以后需要进行多线程下的其他操作,这个时候其他线程里面得ThreadLocal就为空了
图片说明
求大神指导一下我怎么在当前用户的所有线程内继续使用此ThreadLocal而其他用户登陆后再更新一个Threadlocal呢

加载中
0
依然菜刀
依然菜刀

“在获取到用户对应的scheme以后需要进行多线程下的其他操作”

在初始化用于多线程执行的Task(Runnable接口的实现类)的时候,将当前租户的信息从ThreadLocal中取出,然后通过构造方法或者set方法将数据库信息传递给这个Task,在Task多线程并发执行的时候,直接从属性里面获取不就行了吗?

返回顶部
顶部