springboot整合PageHelper,本地内置tomcat测试正常,部署到服务器独立tomcat出现“多个分页插件”错误

本文记录了在SpringBoot项目中使用PageHelper分页插件时遇到的问题,当从内置Tomcat迁移到独立Tomcat,出现'多个分页插件'错误。错误源于两个启动类都配置了相同资源,导致PageHelper被加载两次。解决方案是避免重复配置,正确使用SpringBootServletInitializer,并理解PageHelper自动配置的工作原理。
摘要由CSDN通过智能技术生成

这次经历是个很简单的事情,但是确实又影响了开发人员很久,今天抽时间一步步复现了当时的问题,记录一下。

 

目录

1、基本问题

2、错误信息

3、初步分析与验证

4、根源探究

5、从SpringBootServletInitializer源码看

6、从PageHelper插件源码看

7、另一个问题:为什么取消自动配置后又出现分页失效的问题呢?

8、关于PageHelper,还有哪些注意事项?



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是什么,都会返回整个表的数据;

  

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值