这次经历是个很简单的事情,但是确实又影响了开发人员很久,今天抽时间一步步复现了当时的问题,记录一下。
目录
5、从SpringBootServletInitializer源码看
7、另一个问题:为什么取消自动配置后又出现分页失效的问题呢?
1、基本问题
先看项目结构:
MytestApplication:加了注解@SpringBootApplication,实现一个main方法,作为启动类用于内置tomcat的启动;
SpringBootStartApplication:继承了SpringBootServletInitializer,重写configure方法,war包部署独立tomcat用;
2、错误信息
当时项目组部署遇到的一个问题,本地测试正常,部署后就会出现这个错误:
2018-12-05 12:39:55.005 ERROR org.springframework.boot.web.servlet.support.ErrorPageFilter Line:190 - Forwarding to error page from request [/test/users/1/1/2] due to exception [nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!
### Cause: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!]
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!
### Cause: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!
报错还原如下:
3、初步分析与验证
发现测试环境和生产环境基本一致,唯一不同是本地测试用的是springboot的内置tomcat启动的,而生产环境是打的WAR包,运行在独立tomcat之下的。
用内置tomcat启动类启动或者打jar包运行也没有问题,但是打war包部署到独立tomcat就会出现这个报错。那就要看看有什么区别,但是项目组当时由于经验不足,又紧跟着犯了一个错误,导致新的问题出现。
项目组找到一个解决办法:在MytestApplication 类注解中加上:
@SpringBootApplication(exclude=PageHelperAutoConfiguration.class)
然后在配置文件再配置:(这里留一个疑问,后面再谈)
#配置分页插件pagehelper
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.pageSizeZero=true
pagehelper.params=count=countSql
取消了自动配置,但是新的问题出现了:分页请求不再报错了,但是分页失效了,也就是没有分页了,每次请求不管page、rows是什么,都会返回整个表的数据;