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

devtools/2024/10/19 7:53:20/

前一篇发了 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/devtools/126957.html

相关文章

5G NR:UE初始接入信令流程浅介

UE初始接入信令流程 流程说明 用户设备&#xff08;UE&#xff09;向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU。IN…

力扣 中等 82.删除排序链表中的重复元素 II

文章目录 题目介绍题解 题目介绍 题解 只需在83题基础上加一个while循环即可 class Solution {public ListNode deleteDuplicates(ListNode head) {ListNode dummy new ListNode(101, head);ListNode cur dummy;while (cur.next ! null && cur.next.next ! null) {…

重塑企业数字化未来:物联网与微服务架构的战略性深度融合

从物联网到微服务架构的战略价值解读 随着全球数字化转型的不断加速&#xff0c;企业需要重新审视其技术基础架构&#xff0c;以适应日益复杂的业务需求和市场变化。物联网&#xff08;IoT&#xff09;作为核心技术&#xff0c;已广泛应用于制造、农业、交通、医疗等各个行业&…

lstm基础知识

lstm前言 LSTM(Long short-term memory)通过刻意的设计来避免长期依赖问题&#xff0c;是一种特殊的RNN。长时间记住信息实际上是 LSTM 的默认行为&#xff0c;而不是需要努力学习的东西&#xff01; 在标准的RNN中&#xff0c;这个重复模块具有非常简单的结构&#xff0c;例…

Django 序列化serializers

在Django中&#xff0c;序列化通常指的是将数据库中的模型数据转换为JSON、XML或其他格式的过程。Django提供了内置的序列化工具&#xff0c;可以通过django.core.serializers模块进行序列化操作。 当你使用Django的序列化功能时&#xff0c;可以序列化以下两种对象类型&#…

Redis是单线程为何性能还高

背景 通常来讲&#xff0c;提到性能优化&#xff0c;我们都会说提高并行度。同样我们知道&#xff0c;Redis是单线程执行命令&#xff0c;那为何还能保持如此的高性能呢&#xff1f; 原因 基于内存访问 Redis 将所有数据存储在内存中&#xff0c;内存的读写速度远远高于磁盘&a…

从数据管理到功能优化:Vue+TS 项目实用技巧分享

引言 在项目开发过程中&#xff0c;优化用户界面和完善数据处理逻辑是提升用户体验的重要环节。本篇文章将带你一步步实现从修改项目图标、添加数据、优化日期显示&#xff0c;到新增自定义字段、调整按钮样式以及自定义按钮跳转等功能。这些操作不仅提升了项目的可视化效果&am…

集成方案 | 结合 Microsoft 365 Copilot 与 Docusign,实现 AI 驱动的协议洞察!

使用 Copilot 快速解答你的 Docusign 协议问题。 在 2024 年 9 月&#xff0c;Docusign 宣布与 Microsoft 达成合作&#xff0c;成为首批集成到 Microsoft 365 Copilot 的公司。这一集成使得 Docusign 协议中的信息能够被 Copilot&#xff08;Microsoft 的通用 AI 助手&#xf…