岗位分页查询接口,数据表支持租户隔离,并且已经验证成功。截图如下: 
针对该分页接口,直接加上@TenantIgnore注解,如下图,发现再次调用还是追加了租户过滤。说明注解不生效,是什么原因呢???


@Slf4j
@Aspect
public class BladeTenantAspect {
@Around("@annotation(tenantIgnore)")
public Object around(ProceedingJoinPoint point, TenantIgnore tenantIgnore) throws Throwable {
try {
//开启忽略
BladeTenantHolder.setIgnore(Boolean.TRUE);
//执行方法
return point.proceed();
} finally {
//关闭忽略
BladeTenantHolder.clear();
}
}
}方法嵌套时会在执行第一个mapper方法后执行下面这个方法(可自行debug查看源码实现)
BladeTenantHolder.clear()
案例:
@TenantIgnore
m1(){
m2();
m3();
}
m2(){
m2Mapper.selectOne();
}
m3(){
m3Mapper.selectOne();
}导致:ignore忽略租户标识清除,后面的mapper方法取不到ignore标识,执行mybatisplus方法时拼接tenant_id。
建议改造方案(仅供参考):
@Around("@annotation(tenantIgnore)")
public Object around(ProceedingJoinPoint point, TenantIgnore tenantIgnore) throws Throwable {
Boolean ignore = BladeTenantHolder.isIgnore();
if (ignore){
return point.proceed();
}
try {
//开启忽略
BladeTenantHolder.setIgnore(Boolean.TRUE);
//执行方法
return point.proceed();
} finally {
//关闭忽略
BladeTenantHolder.clear();
}
}