SpringBoot整合Mybatis自定义拦截器不起作用解决方案!!!
该方式和Spring无关,是通过反射的形式创建插件对象,此时会执行 org.apache.ibatis.plugin.Interceptor#setProperties 方法,以读取配置参数。
在resource目录下配置mybatis的全局配置:
然后找到了 springboot配置多数据源后mybatis拦截器失效 文章,说是自定义配置了数据源导致了拦截器失效。
源码位置: org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
上面源码中:自动注入了 Interceptor[] 数组(我们只需将mybatis的自定义拦截器对象放入到Spring容器中)。后续放入了 sqlSessionFactory 中。
但是项目中虽然自定义配置了 sqlSessionFactory 类,但却未设置 factory.setPlugins(this.interceptors); 。导致即使将自定义拦截器放入到Spring容器,但却不生效。
这种情况下,mybatis自定义拦截器会被执行两次。即在mybatis-config.xml配置的拦截器会通过反射的方式创建拦截器,放入Spring容器的拦截器也会被初始化。
源码位置: org.mybatis.spring.SqlSessionFactoryBean#buildSqlSessionFactory
最终会执行到: