PageHelperAutoConfiguration:BeanCreationException:Error creating bean with name PageHelperAutoConfig

  今天引入 PageHelper 插件时,启动报这个异常。找了好多文章都是说以下三个因素,我再添一个自己的情况:

  • PageHelper.jar 版本与 MyBatis 版本不兼容,将 PageHelper 版本调高就行。
  • 引入依赖有误。如果引入的是
<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.2.10version>
dependency> 

  就可以直接使用,因为 spring 会自动配置分页插件,而如果引用的是:

<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelperartifactId>
    <version>4.1.6version>
dependency>

  则还需要在启动类中加入分页插件的手动配置:

 @Bean
 PageHelper pageHelper(){
     //分页插件
     PageHelper pageHelper = new PageHelper();
     Properties properties = new Properties();
     properties.setProperty("reasonable", "true");
     properties.setProperty("supportMethodsArguments", "true");
     properties.setProperty("returnPageInfo", "check");
     properties.setProperty("params", "count=countSql");
     pageHelper.setProperties(properties);

     //添加插件
     new SqlSessionFactoryBean().setPlugins(new Interceptor[]{pageHelper});
     return pageHelper;
 }
  • pagehelper 版本不同,所需的配置类也不一样。
    pagehelper 5.0.0 以下版本。使用的是这个类 Pagehelper,我们在项目中可以这样写:
   @Bean(name = "pageHelper")
   public pageHelper pageHelper(){
       pageHelper pageHelper = new pageHelper();
       Properties properties = new Properties();
       /**默认false,设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用*/
       properties.setProperty("offsetAsPageNum","true");
       /**默认false,设置为true时,使用RowBounds分页会进行count查询 */
       properties.setProperty("rowBoundsWithCount","true");
       /** 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 */
       properties.setProperty("reasonable","true");
       /** always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page */
       properties.setProperty("returnPageInfo","check");
       /** 支持通过Mapper接口参数来传递分页参数 */
       properties.setProperty("supportMethodsArguments","false");
       /**  配置数据库的方言  */
       properties.setProperty("dialect","oracle");
       pageHelper.setProperties(properties);
       return pageHelper;
   }

  5.0.0以上的版本则使用的是 PageInterceptor,就需要改成下面这样:

    @Bean(name = "pageHelper")
    public PageInterceptor pageHelper(){
        PageInterceptor pageHelper = new PageInterceptor();
        Properties properties = new Properties();
        /**默认false,设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用*/
        properties.setProperty("offsetAsPageNum","true");
        /**默认false,设置为true时,使用RowBounds分页会进行count查询 */
        properties.setProperty("rowBoundsWithCount","true");
        /** 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 */
        properties.setProperty("reasonable","true");
        /** always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page */
        properties.setProperty("returnPageInfo","check");
        /** 支持通过Mapper接口参数来传递分页参数 */
        properties.setProperty("supportMethodsArguments","false");
        /**  配置数据库的方言  */
        properties.setProperty("helperDialect","oracle");
        pageHelper.setProperties(properties);
        return pageHelper;
    }
  • 我的情况是:A 模块使用的是:
<dependency>
   <groupId>com.github.pagehelpergroupId>
   <artifactId>pagehelperartifactId>
   <version>4.1.6version>
dependency>

  而 B 模块使用的是:

<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.2.10version>
dependency> 

  A、B 两个模块分别能独立运行,都是已开发完成的产品。但现在要求我将 A 模块运用到B模块上,即 B 依赖 A,这时就报了这个异常。B 明明是自动配置,为什么会找不到 PageInterceptor,B 单独能正常运行,代表配置正确。为什么依赖 A 后就找不到 PageInterceptor 了。最后打断点发现 B 启动的时候,spring 使用的是 A 中的 PageHelper。用 MavenHelper 分析下依赖关系,果然报冲突。在 MavenHelper 中指定依赖上右键可排除该依赖。或者手动在 B 模块的 pom 文件中 A 模块配置 标签内加入:

<exclusion>
	<artifactId>pagehelperartifactId>
	<groupId>com.github.pagehelpergroupId>
exclusion>

  当然,最好的办法是删除其中一个依赖,全部使用同一种方式。

你可能感兴趣的:(Java)