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 实现可显著提升企业场景下的稳定性。