当前使用版本(必填,否则不予处理)

版本 3.5.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

租户拦截器(TenantLineInnerInterceptor)方法builderExpression如下代码段: // 租户 Expression tenantId = tenantLineHandler.getTenantId(); // 构造每张表的条件 List equalsTos = tables.stream() .filter(x -> !tenantLineHandler.ignoreTable(x.getName())) .map(item -> new EqualsTo(getAliasColumn(item), tenantId)) .collect(Collectors.toList()); 此代码段执行先获取了租户表达式,然后进行过滤再构造每张表条件,由于应用在启动的时候需要优先执行SQL,但这时候没有办法获取到租户信息(需要进行异常处理),建议此处获取租户表达式放到过滤之后,代码调整优化如下(大佬有其他办法更好): // 构造每张表的条件 List equalsTos = tables.stream() .filter(x -> !tenantLineHandler.ignoreTable(x.getName())) .map(item -> { Expression tenantId = tenantLineHandler.getTenantId(); return new EqualsTo(getAliasColumn(item), tenantId); }) .collect(Collectors.toList());

重现步骤(如果有就写完整)

报错信息

Comment From: miemieYaho

86ecda70f2d8acf0f80ba5236631f834cdef911a

Comment From: miemieYaho

不过你这种一启动就执行sql的情况你怎么处理租户信息?

Comment From: jeeagile

启动执行SQL跟租户无关,租户信息处理还在考虑中,只所以提这个问题,目前是从用户session中获取(考虑还不完善),租户表达式里用了apache shiro获取session导致报错。感谢大佬支持!!!

Comment From: qmdx

自行处理可以借助 ThreadLocal 传递用户信息