MyCat实现多租户时使用ThreadLoacl碰到的问题
使用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呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
“在获取到用户对应的scheme以后需要进行多线程下的其他操作”
在初始化用于多线程执行的Task(Runnable接口的实现类)的时候,将当前租户的信息从ThreadLocal中取出,然后通过构造方法或者set方法将数据库信息传递给这个Task,在Task多线程并发执行的时候,直接从属性里面获取不就行了吗?