SpringBoot Mybatis PageHelper插件报错

SpringBoot2.0.0 MyBatis1.3.2 PageHelper1.1.2插件,但是在启动运行时,抛错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration': 

错误详情:

2018-04-03 11:23:46.123  WARN 8648 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration': Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration] from ClassLoader [sun.misc.Launcher$AppClassLoader@3d075dc0]

2018-04-03 11:23:46.128  INFO 8648 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-04-03 11:23:46.177  INFO 8648 --- [           main] ConditionEvaluationReportLoggingListener : 


Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-04-03 11:23:46.188 ERROR 8648 --- [           main] o.s.boot.SpringApplication               : Application run failed


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration': Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration] from ClassLoader [sun.misc.Launcher$AppClassLoader@3d075dc0]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
at com.harmoleap.mychat.controller.WechatApplication.main(WechatApplication.java:88) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration] from ClassLoader [sun.misc.Launcher$AppClassLoader@3d075dc0]
at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:759) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:691) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:355) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:339) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:298) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1016) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
... 20 common frames omitted
Caused by: java.lang.NoClassDefFoundError: Lorg/springframework/boot/bind/RelaxedPropertyResolver;
at java.lang.Class.getDeclaredFields0(Native Method) ~[na:1.8.0_73]
at java.lang.Class.privateGetDeclaredFields(Class.java:2583) ~[na:1.8.0_73]
at java.lang.Class.getDeclaredFields(Class.java:1916) ~[na:1.8.0_73]
at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:754) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
... 26 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.bind.RelaxedPropertyResolver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_73]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_73]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_73]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_73]

... 30 common frames omitted


解决方法:pageHelper.jar版本与MyBatis版本不兼容;

修改pom.xml文件中pageHelper的版本为:Maven仓库(PageHelper)

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.2.3</version>
</dependency>

### Spring BootPageHelper 配置错误的解决方案 在 Spring Boot 项目中,PageHelper 是一个常用的分页插件,用于简化 MyBatis 的分页操作。然而,在实际开发过程中,可能会遇到一些配置上的问题。以下是针对这些问题的具体分析和解决方法。 #### 1. 添加正确的依赖 确保 `pom.xml` 文件中有如下依赖项[^3]: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>根据自己的springboot版本进行选择</version> </dependency> ``` 注意:`<version>` 应该与当前使用的 Spring Boot 版本兼容。具体版本号可以通过官方文档或 GitHub 页面确认。 #### 2. 正确初始化 PageHelper 在执行查询前,必须先调用 `PageHelper.startPage()` 方法来设置分页参数。例如: ```java import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; @Autowired private EntityDao entityDao; public List<Entity> queryEntities(int pageNum, int pageSize) { // 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询 return entityDao.selectInfo(); } ``` 需要注意的是,`PageHelper.startPage()` 必须紧邻查询语句之前调用,否则可能导致分页失效。 #### 3. 检查全局配置文件 如果希望在整个应用程序范围内启用 PageHelper,默认可以在 `application.yml` 或 `application.properties` 文件中添加以下配置: ##### application.yml 示例: ```yaml pagehelper: helperDialect: mysql # 数据库方言 reasonable: true # 是否合理化分页 supportMethodsArguments: true # 支持通过参数控制分页 ``` ##### application.properties 示例: ```properties pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true ``` 上述配置中的 `helperDialect` 参数需根据所使用的数据库类型调整(如 MySQL、Oracle 等)。如果不匹配,则可能引发 SQL 构建异常。 #### 4. 常见错误及其原因 - **错误描述**: 查询结果未按预期分页。 - **可能原因**: `PageHelper.startPage()` 调用位置不正确,或者未在查询前及时调用。 - **解决办法**: 确保每次查询前均调用了 `PageHelper.startPage()` 并传递了有效的分页参数。 - **错误描述**: 报错提示无法解析 SQL 分页语法。 - **可能原因**: 配置文件中的 `helperDialect` 不符合当前数据库类型。 - **解决办法**: 修改 `helperDialect` 属性以适配具体的数据库环境。 - **错误描述**: 插件加载失败。 - **可能原因**: Maven 缺少必要的依赖项,或是版本冲突。 - **解决办法**: 清理并重新构建项目 (`mvn clean install`),同时验证依赖版本的一致性。 --- ### 总结 以上是对 Spring BootPageHelper 配置错误的一些常见场景及对应解决方案。核心在于正确引入依赖、合理使用 API 和精确配置属性。遵循这些原则通常可以有效解决问题。 ---
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值