NoSuchMethodException: org.apache.ibatis.javassist.bytecode.analysis.Executor.query(org.apache.ib...

  • 时间:2021-03-20 20:34 作者:deniro 来源: 阅读:493
  • 扫一扫,手机访问
摘要:(1)问题形容自己设置了一个 MyBatis 阻拦器,用于阻拦查询语句。阻拦器的签名为:@Component@Intercepts( @Signature( type = Executor.class, method = ”query”, args = {MappedStatement.class,

(1)问题形容

自己设置了一个 MyBatis 阻拦器,用于阻拦查询语句。阻拦器的签名为:

@Component@Intercepts( @Signature( type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class} ))public class SelectSqlInterceptor implements Interceptor{…}

执行后抛出异常,完整异常日志如下:

java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) [spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) [spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) [spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE] at com.fsti.cc.core.ds.DSApplication.main(DSApplication.java:30) [classes/:na]Caused by: org.apache.ibatis.exceptions.PersistenceException:### Error opening session. Cause: org.apache.ibatis.plugin.PluginException: Could not find method on class org.apache.ibatis.javassist.bytecode.analysis.Executor named query. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.javassist.bytecode.analysis.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler)### Cause: org.apache.ibatis.plugin.PluginException: Could not find method on class org.apache.ibatis.javassist.bytecode.analysis.Executor named query. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.javassist.bytecode.analysis.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler) at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:100) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:57) ~[mybatis-3.5.6.jar:3.5.6] at org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:105) ~[mybatis-spring-2.0.6.jar:2.0.6] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:424) ~[mybatis-spring-2.0.6.jar:2.0.6] at com.sun.proxy.$Proxy57.selectList(Unknown Source) ~[na:na] at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.0.6.jar:2.0.6] at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) ~[mybatis-3.5.6.jar:3.5.6] at com.sun.proxy.$Proxy58.selectAll(Unknown Source) ~[na:na] at com.fsti.cc.core.ds.DSApplication.run(DSApplication.java:35) [classes/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) [spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE] ... 5 common frames omittedCaused by: org.apache.ibatis.plugin.PluginException: Could not find method on class org.apache.ibatis.javassist.bytecode.analysis.Executor named query. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.javassist.bytecode.analysis.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler) at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:83) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.plugin.Plugin.wrap(Plugin.java:44) ~[mybatis-3.5.6.jar:3.5.6] at com.fsti.cc.core.ds.interceptor.SelectSqlInterceptor.plugin(SelectSqlInterceptor.java:55) ~[classes/:na] at org.apache.ibatis.plugin.InterceptorChain.pluginAll(InterceptorChain.java:31) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.session.Configuration.newExecutor(Configuration.java:681) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:96) ~[mybatis-3.5.6.jar:3.5.6] ... 17 common frames omittedCaused by: java.lang.NoSuchMethodException: org.apache.ibatis.javassist.bytecode.analysis.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler) at java.lang.Class.getMethod(Class.java:1786) ~[na:1.8.0_181] at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:80) ~[mybatis-3.5.6.jar:3.5.6] ... 22 common frames omitted

(2)起因分析

org.apache.ibatis.javassist.bytecode.analysis.Executor 类中并没有 query 方法,所以抛错。

(3)问题处理

实际上 MyBatis 依赖中包含两个同名的 Executor 类,自己设置的阻拦器签名需要的类是org.apache.ibatis.executor.Executor。我们进入该类源代码,可以看到的确有相应的 query 方法:

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部