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

发布于 2021-12-08 15:38:28 字数 1198 浏览 752 评论 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呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

卸妝后依然美 2021-12-09 16:40:47

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文