记Mybatis-plus多租户插件引起sql异常的问题解决过程

问题背景

不久前收到一个需求,要求做两套一模一样的功能,这就要求进行数据隔离,通常的数据隔离方案有:

 

text

复制代码

独立数据库 共享数据库,独立Schema(如Oracle、DB2等) 共享数据库,共享 Schema,共享数据表

因为我们使用的Mysql数据库,所以方案2首先被排除,使用方案1需引入多数据源组件,并新建数据库,因为这一个小功能分出两个库显然也有点儿大材小用,最终决定使用方案3,落地方案为引入Mybatis-plus多租户插件。

注: 已知目前项目依赖的mybatis-plus版本为3.1.2jsqlParser版本为2.0

问题发生

因为我们是分布式架构,每个业务一个模块,而这个业务功能归属到一个已有模块业务,考虑到加入的多租户插件不能影响到同模块其他业务功能,因此进行了表过滤,多租户处理器相关代码如下:

image.png

然后Mybatis-plus配置里加入此处理器:

image.png

标2ProjectHandler是上面提到的处理器,进行多租户表过滤,标1TenantSqlParser依赖了此处理器,这个TenantSqlParser大家注意下,后续分析原因会提到。

随后功能正常上线,但是上线后不久,发现同模块老功能的某个sql执行异常了,异常如下:

 

java

复制代码

Exception in thread net.sf.jsqlparser.JSQLParserException at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:123) Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "left" "LEFT" at line 2, column 1. Was expecting one of: "," "SET" at net.sf.jsqlparser.parser.CCJSqlPa

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值