boot+mp搭建版本踩坑记录
创始人
2024-01-22 18:40:07

最近项目搭建中遇到的一些问题,涉及到 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>com.baomidoumybatis-plus-boot-starter3.4.0

2 报错 如下

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

3 解决方案

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

二、引入swagger

1 引入的pom

     io.springfoxspringfox-swagger22.7.0io.springfoxspringfox-swagger-ui2.7.0

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依赖去掉,改为

        com.github.xiaoyminknife4j-spring-boot-starter3.0.2

2 配置类也要修改如下

@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic 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*/@Beanpublic ApiInfo apiInfo() {return new ApiInfoBuilder()//设置文档标题(API名称).title("文档")//文档描述.description("项目")//服务条款URL.termsOfServiceUrl("http://localhost:8080/")//版本号.version("1.0.0")//联系人.contact(new Contact("项目组", "http://localhost", "xxxx@163.com")).build();}/*** 增加如下配置可解决Spring Boot  与Swagger 3.0.0 不兼容问题**/@Beanpublic WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {List> allEndpoints = new ArrayList();Collection 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,否则404String 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文档页面了

页面效果如下:


总结

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

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
最古之史实为方志 左传三不朽 学习时报人生的价值究竟是什么?用什么来衡量人生价值?这是一个曾被无数人问过且继续为无数人追问的话题,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
开山种田打一字谜 开山创始人打... 贵阳市花果园半山小镇兰花坡森林公园——居民开山种地 公园变成菜园山林菜地从山脚一直延伸至山顶,面积近...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...