spring ai框架引入spring cloud alibaba2025.0.0后的修改

截止到2026.2月,spring cloud alibaba终于发布了兼容spring cloud2025的版本,于是笔者最近就想着把之前的mcp服务的配置放到nacos中

1、相关版本升级

笔者原先的项目使用的是spring ai的版本是1.0.0,现在需要对此进行升级,换到1.1.2版本,并将spring-ai-core替换为spring-ai-commons。以及需要升级io.modelcontextprotocol.sdk的版本,从1.0.0升级到1.1.2。还有需要升级spring boot的版本,从3.4.4升级到3.5.10,同时需要增加spring-cloud-starter-alibaba-nacos-discovery与spring-cloud-starter-alibaba-nacos-config依赖,版本为2025.0.0。

pom.xml更改的部分如下

xml 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <dependencies>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-commons</artifactId>
            <version>1.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-mcp</artifactId>
            <version>1.1.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2025.0.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2025.0.0.0</version>
        </dependency>


    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.1.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>io.modelcontextprotocol.sdk</groupId>
                <artifactId>mcp-bom</artifactId>
                <version>${mcp.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

2、相关配置修改

spring cloud alibaba从2023.0.1.3 及以上版本 spring.cloud.nacos.config.shared-configsextension-configs 以及默认加载的 application.name 配置已经废弃, 以上版本请统一使用 spring.config.import 方式导入 Nacos 配置

从2025.1.x 开始,不再支持 bootstrap.yml 以及 bootstrap.properties 用法,请使用 application.yml 或者 application.properties

所以笔者将原先项目的application.properties更新为application.yml,并且废弃bootstrap.yml配置,application.yml配置文件如下:

yaml 复制代码
spring:
  # 配置中心地址
  application:
    # 服务名称
    name: mcp-server
  # 环境配置 例如 admin-dev.yaml
  profiles:
    active: dev #dev-开发环境 test-生产测试环境 prod-生产环境
  config:
    # 使用spring.config.import导入nacos配置
    import: optional:nacos:mcp-server-dev.yaml?group=DEFAULT_GROUP?refreshEnabled=true
  cloud:
    nacos:
      discovery:
        # 开启nacos作为服务注册中心,默认值:true
        enabled: true
        # nacos集群服务注册地址
        server-addr: # nacos的端口和地址
        # 临时实例,默认true,false永久实例,即使宕机也不会从nacos服务中删除,可应对雪崩保护,避免服务被删除
        ephemeral: true
        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
        weight: 100
        namespace: # nacos命名空间
        username: # nacos控制台的用户名
        password: # nacos控制台的用户名
      config:
        server-addr: # nacos的端口和地址
        username: ${spring.cloud.nacos.discovery.username}
        password: ${spring.cloud.nacos.discovery.password}
        context-path: /nacos #nacos的contextPath
        # 命名空间
        namespace: # nacos命名空间

springdoc:
  swagger-ui:
    # 禁止默认路径
    disable-swagger-default-url: true
logging:
  level:
    com.alibaba: warn

请注意,笔者使用的nacos的版本是3.1.1版本,此版本的控制台端口改为8080,8848和9848分别为nacos的注册发现端口和grpc,需要开放服务器的8848和9848端口,才能使应用程序访问nacos,8080端口可选择开放

3、相关代码修改

1)Application启动类需要添加@EnableDiscoveryClient注解,保证该客户端是nacos的client端

2)原先McpServerConfig类中里的stdioServerTransportProvider方法需要更改

typescript 复制代码
@Bean
@ConditionalOnProperty(prefix = "transport", name = "mode", havingValue = "stdio")
public StdioServerTransportProvider stdioServerTransportProvider() {
    return new StdioServerTransportProvider();
}

//更改后
@Bean
@ConditionalOnProperty(prefix = "transport", name = "mode", havingValue = "stdio")
public StdioServerTransportProvider stdioServerTransportProvider() {
    McpJsonMapper mcpJsonMapper=new JacksonMcpJsonMapper(new ObjectMapper());
    //新版本的方法增加了McpJsonMapper,需要使用new出来,并将ObjectMapper传入
    return new StdioServerTransportProvider(mcpJsonMapper);
}

3)原先McpServerConfig类中里sseServerTransportProvider方法也需要修改

typescript 复制代码
@Bean
@ConditionalOnProperty(prefix = "transport", name = "mode", havingValue = "sse")
public WebFluxSseServerTransportProvider sseServerTransportProvider() {
    return new WebFluxSseServerTransportProvider(new ObjectMapper(), "/mcp/message");
}

//更改后
@Bean
@ConditionalOnProperty(prefix = "transport", name = "mode", havingValue = "sse")
public WebFluxSseServerTransportProvider sseServerTransportProvider(ObjectMapper objectMapper) {
    McpJsonMapper mcpJsonMapper = new JacksonMcpJsonMapper(objectMapper);
        /**
         * 原先的WebFluxSseServerTransportProvider,需要通过build方法进行创建
         * 并且WebFluxSseServerTransportProvider的构造方法新增了5个参数
         */
        return WebFluxSseServerTransportProvider.builder()
                //jsonMapper,使用McpJsonMapper创建
                .jsonMapper(mcpJsonMapper)
                //sse的端点
                .sseEndpoint("/sse")
                //mcp可以访问的路径
                .messageEndpoint("/mcp/message")
                .basePath("")
                .keepAliveInterval(null)
                .build();
}
相关推荐
恋猫de小郭6 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
程序员鱼皮11 小时前
我用 GLM-5 做了个 AI 女友,能发自拍、发语音、还能帮我干活!
程序员·aigc·ai编程
想用offer打牌11 小时前
MCP (Model Context Protocol) 技术理解 - 第五篇
人工智能·后端·mcp
Invincible_12 小时前
🌟 Pi:藏在 OpenClaw 里的“最小”AI 编程助手
ai编程
小碗细面12 小时前
AI 编程三剑客:Spec-Kit、OpenSpec、Superpowers 深度对比与实战指南
aigc·ai编程
Vibe_Bloom12 小时前
最新!Claude Code 之父的 12 个配置分享
ai编程·claude
小林攻城狮13 小时前
效率翻倍!TRAE 快速搞定项目规则与技能初始化
ai编程·vibecoding
Invincible_13 小时前
Codex Cli 在Windows 系统中 `AGENTS.md` 文件完整读取流程总结
ai编程
用户48159301959113 小时前
深入理解Skill/MCP/RAG/Agent/OpenClaw底层逻辑
mcp