springboot web 和webflux两个都引用会怎样?

news/2024/10/19 7:57:49/

前一篇发了 springboot 启动 Check your application‘s dependencies for a supported reactive web server-CSDN博客

虽然是解决了,但还是要一探究竟

原因:

在我的项目里引用了pom.xml 引入了 spring.boot.parent 此时如果直接写@SpringBootApplication 其实是会找不到,编译都不会过.

但我在依赖里引入了

<dependency><groupId>io.github.pig-mesh.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.2.1</version>
</dependency>

就是这个,让我误认会我已经加载了正常的springboot web项目了;但为什么会报 reactive的错误 了,正常应该会报web servlet的错才对;

看了一下源码,springappliction run 的时候,会去判断一个

org.springframework.web.reactive.DispatcherHandler 如果存在这个项目就以REACTIVE 非阻塞运行.(了解了一下,这个其实是 springboot2.X 推的一个反堆栈的模块即 springboot-webflux)

但我都没有加载其他的东西,理论上不该报reactive,于是我查看了jar的依赖引用关系,果不其然。

spring-ai-openai...这个包里,依赖了 springboot.web 和 webflux两个都依赖了,所以项目加载里,会找到webflux的Handler

但我的项目里又没有加载 springboot-starter-webflux包,所以根据找不到Nettery相关的容器去创建服务,此时就报错了.

那么又有一个新问题,即然寻找的是 reactive,为什么我加了springboot-starter-web包,又能成功了?

原因是:在springappliction启动的时候,如果找到了 

org.springframework.web.reactive.DispatcherHandler 找到了,并且还要排除掉是否有
org.springframework.web.servlet.DispatcherServlet 类(这个类就是我们常见的servlet了)

所以,当我pom.xml一旦加载了springboot-starter-web 启动的服务类型就会变成SERVLET.

初步的结论就是,如果一个服务即引用了web 又引用了webflux 那服务将会以tomcat服务 启用servlet的机制

否则就会是 netty的 handler机制了。


http://www.ppmy.cn/news/1540214.html

相关文章

MySQL数据库增删改查基础操作(超长详解)

目录 1库的操作 显示数据库&#xff1a; 创建一个库 使用数据库 删除数据库的名 2表操作&#xff1a; 显示表 创建表 查看表 删除表名 新增 查出表的所有行和列&#xff1b; 实例&#xff1a; 别名&#xff1a; 去重&#xff1a; 排序&#xff1a; 限制查找的…

第一百零七周周报

学习时间&#xff1a; 2024.10.12-2024.10.18 学习产出&#xff1a; 这周大部分时间都在黄山开会&#xff0c;目前cifar10还没调好&#xff0c;celebA128的fid到了13点多&#xff0c;还没有跑完&#xff0c;其他时间都在找工作。

基于Flink+Hologres搭建实时数仓

Apache Paimon是一种流批统一的数据湖存储格式&#xff0c;结合Flink及Spark构建流批处理的实时湖仓一体架构。Paimon创新地将湖格式与LSM技术结合起来&#xff0c;给数据湖带来了实时流更新以及完整的流处理能力。借助实时计算Flink版与Apache Paimon&#xff0c;可以快速地在…

矩阵相关算法

矩阵旋转90度 给定一个 n n 的二维矩阵 matrix 表示一个图像&#xff0c;请你将图像顺时针旋转 90 度。 #include <iostream> #include <vector>using namespace std;void rotate(vector<vector<int>>& matrix) {int n matrix.size();// 第一步…

侏罗纪公园不再是电影了吗?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

每日回顾:简单用C写 选择排序、堆排序

选择排序 直接选择排序&#xff08;Selection Sort&#xff09;是一种简单的排序算法。它的基本思想是每次从未排序的部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放到已排序部分的末尾。 版本一&#xff1a; //直接选择排序1 void SelectSort_1(in…

WT2003H语音芯片MCU下载方案助力电动车智能化升级:实现多功能语音提示+报警功能

一&#xff1a;产品市场 随着科技的发展&#xff0c;电瓶车在技术革新上也在不断进步&#xff0c;如今许多厂家&#xff0c;都会加入语音提示功能&#xff0c;能在倒车、喇叭、故障时发出语音报警&#xff0c;提示骑行者电量不足、倒车请注意、故障语音提示等&#xff1b;唯创…

022 elasticsearch文档管理(添加、修改、删除、批处理)

文章目录 添加文档修改文档删除文档根据_id取文档使用批处理_bulk PortX&#xff1a; https://portx.online/zh MobaXterm&#xff1a; https://mobaxterm.mobatek.net/ FinalShell&#xff1a; http://www.hostbuf.com/ 添加文档 向索引中添加一行数据 使用json来表示 使用…