spring ai mcp 和现有业务逻辑如何结合,现有项目用的是spring4.3.7
将 Spring AI 的 MCP(Model Context Protocol)协议集成到基于 Spring 4.3.7 的现有项目中,
需解决版本兼容性和架构适配问题。
有两种方式:1 mcp tool 封装, 2:如果是微服务,可以用spring ai alibaba的 Streamable HTTP 协议
⚠️ 一、核心挑战与兼容性策略
-
版本差异问题
Spring AI 最低要求 Spring Boot 3.x(对应 Spring 6.x),而 Spring 4.3.7 属于旧版框架。直接升级可能破坏现有业务逻辑。
推荐方案:- 渐进式集成:在新模块中使用 Spring Boot 3.x + Spring AI,通过 REST API 或消息队列与旧系统交互。
- 依赖隔离:通过 Maven/Gradle 模块化设计,隔离新老依赖(如将 Spring AI 放在独立子模块中)。
-
MCP 协议适配
MCP 通过标准化接口连接 AI 模型与外部工具(如数据库、API),但旧项目需封装现有业务逻辑为 MCP 兼容工具。
操作步骤:- 将业务逻辑封装为 Spring Bean(如
@Service
类)。 - 通过
SyncMcpToolCallbackProvider
注册为 MCP 工具,暴露给 AI 模型调用。// 示例:封装订单查询服务为 MCP 工具 @Service public class OrderService {@Tool("查询用户订单")public List<Order> getOrders(@Param("userId") String userId) {// 现有业务逻辑} }
- 将业务逻辑封装为 Spring Bean(如
🔧 二、具体集成方案
✅ 方案 1:渐进式升级(推荐)
- 新建 Spring Boot 3.x 模块
引入 Spring AI 依赖(如spring-ai-mcp-client
):<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version> </dependency>
- 通过 HTTP 调用旧系统
在新模块中通过 Feign 或 RestTemplate 调用 Spring 4.3.7 项目的 REST API,将响应结果注入 AI 上下文。
✅ 方案 2:业务逻辑工具化
- 封装现有逻辑为 MCP 工具
使用@Tool
注解标记业务方法,使其可被 AI 模型动态调用:public class LegacyServiceAdapter {@Tool("库存检查")public boolean checkInventory(@Param("productId") String productId) {// 调用旧系统逻辑} }
- 配置 MCP 客户端
在application.yaml
中声明工具:spring:ai:mcp:client:tools:- inventoryService
✅ 方案 3:Streamable HTTP 优化企业集成
针对企业级场景,采用 MCP 的 Streamable HTTP 协议(由 Spring AI Alibaba 实现),解决旧版 HTTP+SSE 的断线重连问题:
# 配置 Streamable HTTP 端点
spring:ai:mcp:endpoint: /mcp-streamsession-recovery: true # 支持会话恢复
优势:
- 无状态通信无需会话粘滞(Sticky Session),适合微服务架构。
- 兼容负载均衡和 API 网关(如 Higress)。
🧩 三、关键技术点
-
依赖冲突解决
- 使用
maven-shade-plugin
重命名冲突包(如旧版 Spring Core)。 - 排除 Spring AI 中高版本依赖(如 Guava),改用兼容版本。
- 使用
-
检索增强生成(RAG)整合
结合现有数据库实现知识增强:// 注入向量存储实现 RAG @Autowired private VectorStore vectorStore;public String queryWithContext(String question) {QuestionAnswerAdvisor advisor = QuestionAnswerAdvisor.builder(vectorStore).build();return ChatClient.builder(chatModel).build().prompt().advisors(advisor).user(question).call().content(); }
-
性能与扩展性
- 无状态工具:90% 的 MCP 工具可设计为无状态,避免会话管理开销。
- 异步调用:使用
@Async
封装耗时业务逻辑,防止阻塞 AI 线程。
🔍 四、实践示例
场景:在电商旧系统中添加 AI 客服订单查询功能
- Step 1:在新模块创建
OrderMCPController
(Spring Boot 3.x),调用旧系统订单 API。 - Step 2:注册为 MCP 工具:
@RestController public class OrderMCPController {@PostMapping("/mcp/orders")public List<Order> getOrders(@RequestBody UserQuery query) {// 调用 Spring 4.3.7 的订单服务} }
- Step 3:AI 模型通过 MCP 协议调用该工具:
spring:ai:mcp:client:stdio:connections:order-service:command: "curl -X POST http://legacy-system/orders"
⚠️ 五、注意事项
- 协议选择:优先采用 Streamable HTTP 替代 stdio 模式(更适合服务器部署)。
- 工具复用:将 Alita 等智能体生成的 MCP 工具集成到业务中,提升处理复杂任务的能力。
- 监控:通过 Micrometer 跟踪 MCP 调用延迟和错误率。
综上,渐进式升级 + 业务工具化封装是平衡改造风险与收益的最佳路径。重点在于通过 MCP 将旧逻辑包装为标准化工具,而非直接升级框架。Spring AI Alibaba 的 Streamable HTTP 实现可显著提升企业场景下的稳定性。
相关文章:
spring ai mcp 和现有业务逻辑如何结合,现有项目用的是spring4.3.7
将 Spring AI 的 MCP(Model Context Protocol)协议集成到基于 Spring 4.3.7 的现有项目中, 需解决版本兼容性和架构适配问题。 有两种方式:1 mcp tool 封装, 2:如果是微服务,可以用spring ai a…...

【设计模式-4.11】行为型——解释器模式
说明:本文介绍行为型设计模式之一的解释器模式 定义 解释器模式(Interpreter Pattern)指给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器模式是一种…...

【已解决】MACOS M4 芯片使用 Docker Desktop 工具安装 MICROSOFT SQL SERVER
1. 环境准备 确认 Docker Desktop 配置 确保已安装 Docker Desktop for Mac (Apple Silicon)(版本 ≥ 4.15.0)。开启 Rosetta(默认开启): 打开 Docker Desktop → Settings → General → Virtual Machine Options …...

Quipus系统的视频知识库的构建原理及使用
1 原理 VideoRag在LightRag基础上增加了对视频的处理,详细的分析参考LightRag的兄弟项目VideoRag系统分析-CSDN博客。 Quipus的底层的知识库的构建的核心流程与LightRag类似,但在技术栈的选择和处理有所不同。Quipus对于视频的处理实现,与Vi…...

web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界
web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界 金融问题 1.个人投资:在不同的时间和可能的情况(状态)下积累财富 2.商业投资:为企业家和企业提供投资生产性活动的资源 目标:跨越时间和…...

国芯思辰|SCS5501/5502芯片组打破技术壁垒,重构车载视频传输链路,兼容MAX9295A/MAX96717
在新能源汽车产业高速发展的背景下,电机控制、智能驾驶等系统对高精度信号处理与高速数据传输的需求持续攀升。 针对车载多摄像头与自动驾驶辅助系统对长距离、低误码率、高抗干扰性数据传输的需求,SCS5501串行器与SCS5502解串器芯片组充分利用了MIPI A…...
【图像处理3D】:点云图是怎么生成的
点云图是怎么生成的 **一、点云数据的采集方式****1. 激光雷达(LiDAR)****2. 结构光(Structured Light)****3. 双目视觉(Stereo Vision)****4. 飞行时间相机(ToF Camera)****5. 其他…...

压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?
压敏电阻,英文名简称VDR,电子元器件中重要的成员之一,是一种非线性伏安特性的电阻器件,有电阻特性的同时,也拥有其他自身的特性,广泛应用于众多领域。在电源系统、安防系统、浪涌抑制器、电动机保护、汽车电…...

用WPDRRC模型,构建企业安全防线
文章目录 前言什么是 WPDRRC 模型预警(Warning)保护(Protection)检测(Detection)响应(Response)恢复(Recovery)反击(Counterattack) W…...

使用 Amazon Q Developer CLI 快速搭建各种场景的 Flink 数据同步管道
在 AI 和大数据时代,企业通常需要构建各种数据同步管道。例如,实时数仓实现从数据库到数据仓库或者数据湖的实时复制,为业务部门和决策团队分析提供数据结果和见解;再比如,NoSQL 游戏玩家数据,需要转换为 S…...
Java应用服务在Kubernetes集群中的改造与配置
哈喽,大家好,我是左手python! 微服务架构与容器化 微服务架构的优势 微服务架构是一种将应用程序构建为一组小型独立服务的方法。每个服务负责完成特定的业务功能,并且可以独立地进行开发、部署和扩展。这种架构在Kubernetes环境…...

Linux 里 su 和 sudo 命令这两个有什么不一样?
《小菜狗 Linux 操作系统快速入门笔记》目录: 《小菜狗 Linux 操作系统快速入门笔记》(01.0)文章导航目录【实时更新】 Linux 是一个多用户的操作系统。在 Linux 中,理论上来说,我们可以创建无数个用户,但…...
「数据分析 - Pandas 函数」【数据分析全栈攻略:爬虫+处理+可视化+报告】
- 第 105 篇 - Date: 2025 - 06 - 05 Author: 郑龙浩/仟墨 Pandas 核心功能详解与示例 文章目录 Pandas 核心功能详解与示例1. 数据结构基础1.1 Series 创建与操作1.2 DataFrame 创建与操作 2. 数据选择与过滤2.1 基本选择方法2.2 布尔索引 3. 数据处理与清洗3.1 缺失值处理3.…...

JAVASCRIPT 简化版数据库--智能编程——仙盟创梦IDE
// 数据模型class 仙盟创梦数据DM {constructor(key) {this.key ${STORAGE_PREFIX}${key};this.data this.加载数据();}加载数据() {return JSON.parse(localStorage.getItem(this.key)) || [];}保存() {localStorage.setItem(this.key, JSON.stringify(this.data));}新增(it…...
YAML在自动化测试中的三大核心作用
YAML在自动化测试中的三大核心作用 配置中心:管理测试环境/参数 # config.yaml environments:dev: url: "http://dev.api.com"timeout: 5prod:url: "https://api.com"timeout: 10数据驱动:分离测试数据与脚本 # test_data.yaml lo…...

命名管道实现本地通信
目录 命名管道实现通信 命名管道通信头文件 创建命名管道mkfifo 删除命名管道unlink 构造函数 以读方式打开命名管道 以写方式打开命名管道 读操作 写操作 析构函数 服务端 客户端 运行结果 命名管道实现通信 命名管道通信头文件 #pragma#include <iostream> #include &l…...

iOS上传应用包错误问题 “Invalid bundle. The “UIInterfaceOrientationPortrait”“
引言 在开发 iOS 应用的整个生命周期中,打包上传到 App Store 是一个至关重要的步骤。每一次提交,Xcode 都会在后台执行一系列严格的校验流程,包括对 Info.plist 配置的检查、架构兼容性的验证、资源完整性的审查等。如果某些关键项配置不当…...
【LeetCode】1061. 按字典序排列最小的等效字符串(并查集)
LeetCode 1061. 按字典序排列最小的等效字符串 (中等) 题目链接:LeetCode 1061. 按字典序排列最小的等效字符串 (中等) 题目描述 给出长度相同的两个字符串s1 和 s2 ,还有一个字符串 baseStr 。 其中 s1[i] 和 s2[i] 是一组等价字符。 举个例子&#…...

猎板厚铜PCB工艺能力如何?
在电子产业向高功率、高集成化狂奔的今天,电路板早已不是沉默的配角。当5G基站、新能源汽车、工业电源等领域对电流承载、散热效率提出严苛要求时,一块能够“扛得住大电流、耐得住高温”的厚铜PCB,正成为决定产品性能的关键拼图。而在这条赛道…...

Flutter快速上手,入门教程
目录 一、参考文档 二、准备工作 下载Flutter SDK: 配置环境 解决环境报错 zsh:command not found:flutter 执行【flutter doctor】测试效果 安装Xcode IOS环境 需要安装brew,通过brew安装CocoaPods. 复制命令行,打开终端 分别执行…...

算法:前缀和
1.【模版】前缀和 【模板】前缀和_牛客题霸_牛客网 这道题如果使用暴力解法时间复杂度为O(n*m),会超时,所以要使用前缀和算法。 前缀和->快速求出数组中某一个连续区间的和。 第一步:预处理出一个前缀和数组 dp。 dp[i]表示[1, i] 区间…...

DEVICENET转MODBUS TCP网关与AB数据输出模块的高效融合方案研究
在工业自动化领域,多样化的设备通常采用不同的通信协议,这为系统集成带来了显著的挑战。特别是在需要将遵循DeviceNet协议的设备与基于MODBUS TCP协议的系统进行互连时,这一挑战尤为突出。AB数据输出作为一种功能卓越的DeviceNet分布式输入/输…...
牛客小白月赛113
前言:这场的E题补的我头皮都发麻了。 A. 2025 题目大意:一个仅有‘-’‘*’组成的字符串,初始有一个sum 1, 从左到右依次遍历字符串,遇到-就让sum--;遇到*就让sum* 2,问sum有没有可能大于等于…...

Mac版本Android Studio配置LeetCode插件
第一步:Android Studio里面找到Settings,找到Plugins,在Marketplace里面搜索LeetCode Editor。 第二步:安装对应插件,并在Tools->LeetCode Plugin页面输入帐号和密码。 理论上,应该就可以使用了。但是&a…...

电子电路基础1(杂乱)
电路基础知识 注意:电压源与电流源的表现形式 注意:在同一根导线上电势相等 电阻电路的等效变换 电子元器件基础 电阻...
rocketmq延迟消息的底层原理浅析
rocketmq延迟消息的底层原理 消息实体 延时消息是指允许消息在指定延迟时间后才被消费者消费 Apache RocketMQ 中,消息的核心实体类是 org.apache.rocketmq.common.message.Message public class Message implements Serializable {private String topic; …...

【openssl】升级为3.3.1,避免安全漏洞
本文档旨在形成 对Linux系统openssl版本进行升级 的搭建标准操作过程,搭建完成后,实现 openssl 达到3.3以上版本,避免安全漏洞 效果。 一、查看当前版本 版本不高于3.1的,均需要升级。 # 服务器上运行以下命令,查看…...

使用 HTML +JavaScript 从零构建视频帧提取器
在视频编辑、内容分析和多媒体处理领域,常常需要从视频中提取关键帧。手动截取不仅效率低下,还容易遗漏重要画面。本文介绍的视频帧提取工具通过 HTML5 技术栈实现了一个完整的浏览器端解决方案,用户可以轻松选择视频文件并进行手动或自动帧捕…...
基于若依前后分离版-用户密码错误锁定
sys_config配置参数 user.password.maxRetryCount:最大错误次数 user.password.lockTime:锁定时长 //SysLoginController//登录 PostMapping("/login") public AjaxResult login(RequestBody LoginBody loginBody) {AjaxResult ajax AjaxR…...

论文速读《DexWild:野外机器人策略的灵巧人机交互》
项目链接:https://dexwild.github.io/ 论文链接:https://arxiv.org/pdf/2505.07813 0. 简介 2025年5月,卡内基梅隆大学(CMU)发布了一篇突破性论文《DexWild: Dexterous Human Interactions for In-the-Wild Robot Pol…...