pagehelper / Mybatis-PageHelper

Mybatis通用分页插件
https://mybatis.io
MIT License
12.21k stars 3.13k forks source link

开启异步count支持后,不兼容Mybatis-Plus的多租户插件 #805

Open java-my-life opened 8 months ago

java-my-life commented 8 months ago

使用环境

配置多租户插件

interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
        @Override
        public Expression getTenantId() {
          return new StringValue(ContextHolder.getTenant());
        }
        @Override
        public boolean ignoreTable(String tableName) {
          return false;
        }
      }));

开启异步count支持后

发现count条件中并没有tenant_id image

关闭异步count支持后

一切正常,count条件中存在tenant_id image

cqu2014 commented 8 months ago

您的邮件王振已收到 。

abel533 commented 8 months ago

考虑增加一个简单接口允许处理上下文。。在进入异步线程前执行a()方法,进入异步线程执行后执行b()方法。

a()方法可以先从ThreadLocal取值,b()方法可以存值。。执行完成后执行c()方法清理ThreadLocal,你看看是否可行?

java-my-life commented 8 months ago

意思是要手动把条件塞进去吗? 这样count是可以,但是正常的列表查询就会出现两条相同的条件。 目前开启异步count的话,是不是所有的实现mybatisPlus的InnerInterceptor拦截器都存在问题? 之后版本会修复这个问题吗?

pagehelper commented 8 months ago

首先这不算问题,主要是ThreadLocal线程绑定的原因,如果在mybatis中遇到类似拦截器,都需要手动在新线程上进行绑定。

你这种情况就别用异步count了。