首页 > 其他分享 >boot+mp搭建版本踩坑记录

boot+mp搭建版本踩坑记录

时间:2023-06-12 16:34:18浏览次数:36  
标签:basePath boot 报错 mp 版本 new swagger public 搭建


最近项目搭建中遇到的一些问题,涉及到 mp 版本 swagger集成等


文章目录

  • 前言
  • 一、引入mp启动报错
  • 1 相关配置
  • 2 报错 如下
  • 3 解决方案
  • 二、引入swagger
  • 1 引入的pom
  • 2 报错如下:
  • 3 解决方案
  • 三. 项目启动自动打开swagger页面
  • 总结



前言

由于使用高版本springboot 导致集成遇到的一些问题


一、引入mp启动报错

1 相关配置

项目中使用springboot + maven的多module 方式构建
springboot版本 3.0.0-RC2
mp版本 3.4.0

dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>

2 报错 如下

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

3 解决方案

通过多次找博文并未解决,后参考之前的项目,降级springboot版本到2.7.0 问题解决,应该是版本兼容问题;

二、引入swagger

1 引入的pom

<dependency><!--添加Swagger依赖 -->
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency><!--添加Swagger-UI依赖 -->
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

2 报错如下:

Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null

3 解决方案

由于springboot版本超过2.6之后,引入swagger确实会有问题,按照网上解决了半天还是不行;
最终如下:
1 pom 中的swagger依赖去掉,改为

<dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>

2 配置类也要修改如下

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
            .apiInfo(apiInfo())
            .groupName("项目")
            //是否开启 (true 开启  false隐藏。生产环境建议隐藏)
            //.enable(false)
            .select()
            //扫描的路径包,设置basePackage会将包下的所有被@Api标记类的所有方法作为api
            //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
            //指定路径处理PathSelectors.any()代表所有的路径
            .paths(PathSelectors.any())
            .build();
    }
    /**
     * 配置基本信息
     * @return
     */
    @Bean
    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            //设置文档标题(API名称)
            .title("文档")
            //文档描述
            .description("项目")
            //服务条款URL
            .termsOfServiceUrl("http://localhost:8080/")
            //版本号
            .version("1.0.0")
            //联系人
            .contact(new Contact("项目组", "http://localhost", "[email protected]"))
            .build();
    }
    /**
     * 增加如下配置可解决Spring Boot  与Swagger 3.0.0 不兼容问题
     **/
    @Bean
    public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
        List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
        Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
        allEndpoints.addAll(webEndpoints);
        allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
        allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
        String basePath = webEndpointProperties.getBasePath();
        EndpointMapping endpointMapping = new EndpointMapping(basePath);
        boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
        return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
    }
    private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
        return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
    }
}

3 yml中增加

spring:
  # swagger 配置
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

访问地址为: http://localhost:port/doc.htm

三. 项目启动自动打开swagger页面

增加如下配置类

@Configuration
public class BrowserAutoConfig {

    @Value("${server.servlet.context-path:/}")
    private String prefix;

    @EventListener({ApplicationReadyEvent.class})
    public void applicationReadyEvent() {
        // 这里需要注url:端口号后不加任何地址,跳转项目首页,比如index.html,否则404
        String url = "http://localhost:8088/"+prefix+"/doc.html";
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec("rundll32 url.dll,FileProtocolHandler " + url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

prefix这个是读取yml中可能配置的项目访问路径,可以保证即使更改,也能争取打开swagger页面
这样只要启动项目,就会自动打开当前项目的swagger文档页面了

页面效果如下:

boot+mp搭建版本踩坑记录_sql


总结

经过此次项目搭建,深知各个版本之前是不兼容的,以后搭建的时候,一定要提前调研好个版本之前的匹配度,否则会造成很多莫名其妙的问题~~


标签:basePath,boot,报错,mp,版本,new,swagger,public,搭建
From: https://blog.51cto.com/u_16158506/6463451

相关文章

  • springboot日期格式化,时差问题
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、mysql中日期字段的正确设置二、日期格式化,时差1.日期字段返回格式不正确--方案一2.日期字段返回格式不正确--方案二二、日期无法自动填充1.mybatis-plus2.mybatis只能靠自己了总结前言随着mysql8......
  • 自定义SpringBoot的starter
    1.自定义starter名为my-starter-spring-boot-starter1.1idea中创建一个maven模块groupId为com.exampleartifactId为my-starter-spring-boot-starter起名规范:1.官方starter是spring-boot-starter-xxxx2.自定义starter是xxx-spring-boot-starter依赖如下<?xmlversion="1.0......
  • SpringBoot多模块项目搭建以及搭建基础模板
    多模块项目搭建目录多模块项目搭建1.父项目pom文件编辑2.创建子模块1.父项目pom文件编辑<!--1.父工程添加pom格式--><packaging>pom</packaging><!--定义子模块--><modules><module>walker-service</module><module>walker-utils&......
  • springboot使用swagger2以及遇到的一些问题
    1.导入依赖<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId>......
  • ​跨部门网络搭建,核心在这30行里
    大家好,我的网工朋友。在企业网络中,想要实现跨部门的VLAN互联互通,其实有很多方式。你可以通过子接口实现,也可以通过VLAN-Interface实现。但在实际工作中,很多网工朋友,遇到这种情况,很容易会回不过神来,一下子卡壳宕机。今天我们不聊理论,就整点实际的,看完就能用到你的实战工作之中。在部......
  • 静态博客搭建工具汇总
    Jekyll、Hugo、Hexo是简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过Markdown以及Liquid转化成一个完整的可发布的静态网站,你可以发布在任何你喜爱的服务器上。Jekyll、Hugo、Hexo也可以运行在码云(Gitee.com)Pages上,也就是说,你可以使......
  • U-Mail企业邮件服务器搭建方案
    数字化办公的日渐推行,使企业对邮箱的依赖与日俱增,正式工作报告,部门之间的事物往来、通知等等都需要使用到企业邮箱。随着企业对数字化建设的不断深入,企业对企业邮箱的要求也越来越高,比如对第三方应用集成及协同办公要求高,需要同时支持多种业务的开展,对企业邮箱的稳定及高效性要求高......
  • Java开发 - 让你少走弯路的Redis集群搭建
    前言前文中,我们已经对Redis的单节点哨兵的搭建方式做了演示和测试,相信大家已经了解了怎么操作,虽然是单节点,但基本已经满足了部分公司的日常需要,毕竟Redis集群不是什么项目都适用,用上了Redis,也未必需要使用哨兵,甚至集群。但今天,我们还是要把Redis哨兵集群的搭建方式给大家做个分享,万......
  • springboot kettle gralde dockerfile 多阶段构建
    dockerfileFROMopenjdk:8-jdk-alpineASTEMP_BUILD_IMAGEENVENVREFRESH_DATE2023-06-1215:00RUNset-eux&&sed-i's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g'/etc/apk/repositoriesRUNapkupdate&&apkadd--no-cacheb......
  • 专业电竞陪玩开黑游戏交友系统app搭建之功能
    年轻人自己创业的时候总会想找一些风口项目已期在较短的时间,获得较高的利润汇报。作为一个兴起的行业,游戏开黑app、语音社交也是这几年粉丝数暴涨,游戏陪玩软件也层出不穷。在此给大家分享一款专业、功能齐全的游戏陪玩系统app。后端源码下载地址和搭建方法:https://gitee.com/wang-l......