SpringBoot项目启动失败:共三处错误,都是依赖的问题┭┮﹏┭┮

news2024/10/2 8:30:38

文章目录

  • 项目启动报错1:`Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway`
  • 项目启动报错2:`Failed to determine a suitable driver class`
  • 项目启动报错3:`Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException`
  • 总结

项目启动报错1:Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway

  • 问题背景

    由于我在公共模块中引入了spring-boot-starter-web依赖,后面在gateway模块中引入了公共模块,然后项目启动之时就报错Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway

    image-20230730140023398

  • 问题原因

    在类路径上找到了Spring MVC,与Spring Cloud Gateway不兼容。这是由于Spring Cloud Gateway和Spring MVC是两个不同的Web框架,它们具有不同的设计理念和工作方式。主要原因是它们之间存在以下几个不兼容的方面:

    1. 非阻塞与阻塞:Spring Cloud Gateway是一个反应式的网关,基于Reactor模型,使用异步非阻塞的方式处理请求,而Spring MVC是一个传统的阻塞式框架,使用同步阻塞的方式处理请求。
    2. 功能冲突:Spring MVC提供了完整的MVC功能,例如@Controller、@RequestMapping等注解,用于构建传统的Web应用程序。而Spring Cloud Gateway是专门用于构建微服务架构下的网关,主要关注路由、过滤、负载均衡等功能,没有提供传统MVC的各种注解和特性。
    3. 依赖冲突:Spring Cloud Gateway和Spring MVC都依赖于Spring Boot,但是它们在对应的依赖中使用了不同的starter。Spring Cloud Gateway使用spring-cloud-starter-gateway依赖,而Spring MVC使用spring-boot-starter-web依赖。这两个依赖中包含了不同版本的相关库,导致冲突。

    为了解决这种不兼容性,需要根据实际需求进行调整。通过设置spring.main.web-application-type=reactive可以将应用程序标记为反应式应用程序,使其与Spring Cloud Gateway兼容。另外,如果不需要使用Spring MVC的功能,也可以直接删除spring-boot-starter-web依赖项,从而避免冲突。

  • 问题解决

    排除公共模块中的spring-boot-starter-web依赖

    image-20230730140357143

项目启动报错2:Failed to determine a suitable driver class

之后项目再次启动报错Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class

image-20230730140637876

  • 问题原因

    我公共模块存储了实体类,实体类需要使用到MyBatisPlus依赖,所以我的公共模块中引入了MyBatisPlus依赖,而当前的gateway模块中也引入了公共模块,就顺带把MyBatisPlus依赖引入,MyBatisPlus依赖引入后如果启动SpringBoot程序,会自动去搜索链接数据库,检查配置文件是否有数据库连接配置,而我的Gateway模块鸭羹就没有使用数据库,所以这就导致报错Failed to determine a suitable driver class

  • 问题解决

    • 方案一:通过@SpringBootApplication注解的exclude属性排除数据库,从而告诉Spring我当前项目中并不会使用到数据库

      @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
              DataSourceTransactionManagerAutoConfiguration.class,
              HibernateJpaAutoConfiguration.class})
      
    • 方案二:排除公共模块中的MyBatisPlus依赖

      解决方式和前面一样

      image-20230730141942647

项目启动报错3:Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

  • 问题原因

    由于我在公共模块中引入了Knife4j依赖,为了对DTO类中的字段使用@ApiMode进行API 文档描述,这就导致其它模块也简介引入了Knife4j,当前这个Knife4j在我的common模块和admin模块都是需要用到的,所以就放到了commom模块,但是我的interfas模块不需要,同时我的interfas模块还需要运行,由于当前项目是使用的 SpringBoot2.7 ,Knife4j是3.0.3,这里使用的Swagger版本是2.9.2、springboot 版本是2。7.2,发现是springboot版本太高,缺少swagger运行所需要的环境,具体缺少什么还没研究出来,所以只能回退到之前的版本,这在之前其实已经遇到过了

    说了一大堆,简而言之就是:SpringBoot和Swagger版本冲突,SpringBoot2.6开始就不在兼容Swagger3了

  • 问题解决

    • 方案一:改动版本,要么降低SpringBoot的版本,要么提高Swagger的版本(这里不建议这么做,改动版本风险太大了)

    • 方案二:排除当前公共模块中的Knife4j(采用并成功解决

    • 方案三:让当前版本的SpringBoot能够兼容Swagger

      spring:
       mvc:
          pathmatch:
            matching-strategy: ant_path_matcher # 支持 swagger3
      

总结

两处报错的原因都是由于依赖处理不当的原因,解决起来不难,提示都比较明显

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/865199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最佳实践:Swagger 自动生成 Api 文档

目录 Tapir 介绍 为什么使用 Tapir 快速使用 Tapir 添加依赖 定义一个端点(Endpoint) 生成 Swagger ui 根据 yaml 生成 endpoint 自动生成 API 文档的好处不言而喻,它可以提供给你的团队或者外部协作者,方便 API 使用者准确地调用到你的 API。为了…

CTFSHOW 文件包含

目录 web78 php://filter web79 data://text/plain web80 日志文件包含 web81 web82-86 session 文件包含 web87 死亡代码 绕过 rot13 base64 rot13 base64 web88 web78 php://filter <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-09-16 10:…

LinuxC编程——线程间通信

目录 一、同步的概念二、同步机制2.1 信号量2.1.1基础概念2.1.2 函数接口2.1.3 例子 2.2 互斥锁2.2.1 几个概念2.2.2 函数接口2.2.3 练习 2.3 条件变量2.3.1 步骤2.3.2 函数2.3.3 练习 我们知道&#xff0c;一个进中的所有线程共享进程的资源&#xff0c;所以可以通过在进程中定…

Jetson nano镜像备份

首先我们要做的准备工作有&#xff1a;含有镜像的 SD 卡、读卡器、安装了 ubuntu 环境的电脑。 备份步骤&#xff1a; 1、把含有镜像的卡用读卡器插到硬盘剩余空间大于 64G&#xff08;具体根据镜像大小使用&#xff09; 的 Ubuntu 电脑上&#xff0c;注意这里不能使用虚拟机…

自建机房还是选择云服务器?以腾讯云为例

大企业是选择自购服务器自建机房还是使用腾讯云服务器&#xff1f;都说企业上云是趋势&#xff0c;自建机房是一次性支出&#xff0c;上云租赁云服务器等产品需要年年续费&#xff0c;大型企业有必要把数据中心迁移上云吗&#xff1f;腾讯云服务器网想说&#xff0c;自建机房购…

opencv基础59-霍夫变换原理讲解及示例-cv2.HoughLines()->(直线,圆形检测)

霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用类似于投票的方式来获取当前图像内的形状集合&#xff0c;该变换由 Paul Hough&#xff08;霍夫&#xff09;于 1962 年首次提出。 最初的霍夫变换只能用于检测直线&#xff0c;经过发展后&#xff0…

PAT 1085 Perfect Sequence

个人学习记录&#xff0c;代码难免不尽人意 Sample Input: 10 8 2 3 20 4 5 1 6 7 8 9 Sample Output: 8 #include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<string> #include<map> #include<cmath&…

CAP理论与MongoDB一致性,可用性的一些思考

正文 大约在五六年前&#xff0c;第一次接触到了当时已经是hot topic的NoSql。不过那个时候学的用的都是mysql&#xff0c;Nosql对于我而言还是新事物&#xff0c;并没有真正使用&#xff0c;只是不明觉厉。但是印象深刻的是这么一张图片&#xff08;后来google到图片来自这里&…

打造个性化观影盛宴:对实时多兴趣召回的探索

包括 Tubi 在内的广告型点播流媒体服务&#xff0c;正在成为免费在线消费娱乐的重要组成部分。Tubi 拥有一个囊括电视剧、电影、体育和娱乐直播频道的海量视频内容库&#xff1b;同时&#xff0c;Tubi 为观众提供个性化的视频推荐&#xff0c;帮助观众快速找到想看的视频内容&a…

从零实战SLAM-第二课(SLAM中的基础数学)

空间数据的表达方式&#xff1a;点和向量两种形式。 向量的内积&#xff0c;也叫做点乘&#xff0c;是逐点相乘后累加&#xff0c;最终结果是一个标量&#xff0c;物理意义是一个向量在另一个向量上的投影。 外积&#xff0c;也叫做叉乘&#xff0c;两个向量拼起来成&#xff0…

vue二进制下载

封装axios&#xff0c;/api/request import axios from axios import store from /store import Vue from vue import { Message, MessageBox } from element-uiimport { getToken } from /utils/authaxios.defaults.headers[Content-Type] application/json;charsetutf-8 co…

同一局域网共享一个打印机方法

文章目录 需求描述设备连接情况配置网络凭证 需求描述 pc2想直接打印&#xff0c;而不是每次存到u盘&#xff0c;再拿到pc1&#xff0c;打印&#xff0c;实现本机打印 设备连接情况 配置 &#xff08;1&#xff09;pc1设置 ①共享打印机操作 控制面板——>设备和打印机—…

HC32L110B6芯片测试

到货之后&#xff0c;直观上感觉的确很小&#xff0c;小包装盒里面还装了说明书。 下载器单独在一个盒里面&#xff0c;但是这个T-U2T没用上&#xff0c;还是用的STLINK。 开发之前先去网上找了一些别人遇到的坑&#xff0c;的确不少。 涉及的方面也是挺全的&#xff0c;供电、…

1. 如何爬取自己的CSDN博客文章列表(获取列表)(博客列表)(手动+python代码方式)

文章目录 写在最前步骤打开chrome浏览器&#xff0c;登录网页按pagedown一直往下刷呀刷呀刷&#xff0c;直到把自己所有的博文刷出来然后我们按F12&#xff0c;点击选取元素按钮然后随便点一篇博文&#xff0c;产生如下所示代码然后往上翻&#xff0c;找到头&#xff0c;复制然…

DC-9靶机(端口敲门服务Knockd)

DC-9靶机地址 信息收集 主机发现 靶机MAC&#xff1a;00:0C:29:5A:C1:F4 arp-scan -l端口扫描 nmap -A -p- 192.168.80.142访问80端口 目录爆破 dirsearch -u 192.168.80.139 -i 200点击页面上的四个标签&#xff0c;发现 有个搜索 框&#xff0c;有个登录框 先用bp抓个包…

atxserver2环境搭建

1. 卸载python3.11.4版本 $sudo rm -rf /Library/Frameworks/Python.framework/Versions/3.11/ $sudo rm -rf /Applications/Python\ 3.11/ 第三步&#xff1a;删除指向python的链接 cd /usr/local/bin/ ls -l /usr/local/bin | grep /Library/Frameworks/Python.framework/…

利用logstash将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

Vue 整合 Element UI 、路由嵌套和参数传递(五)

一、整合 Element UI 1.1 工程初始化 使用管理员的模式进入 cmd 的命令行模式&#xff0c;创建一个名为 hello-vue 的工程&#xff0c;命令为&#xff1a; # 1、目录切换 cd F:\idea_home\vue# 2、项目的初始化&#xff0c;记得一路的 no vue init webpack hello-vue 1.2 安装…

记录一次使用python调用java代码

Python调用Java代码的主要原理是通过使用Java虚拟机&#xff08;JVM&#xff09;和相关的库/工具实现的。 在Python中&#xff0c;可以使用以下几种方式来调用Java代码&#xff1a; 使用subprocess模块&#xff1a;可以通过subprocess模块来启动一个子进程&#xff0c;并在子进…

OpenGL纹理

纹理采样器----纹理坐标 只有纹理坐标&#xff0c;纹理没有作用。 纹理坐标是在顶点着色器中设置&#xff0c;需要传入片段着色器&#xff0c;在片段着色器中需要定义纹理采样器。 然后调用texture函数利用采样器和纹理坐标对纹理进行采样。 我们使用GLSL内建的texture函数…