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();
}
相关推荐
妙码生花3 分钟前
从 PHP 到 AI + Golang,程序员自救转型手记(五十一):管理员和角色组的关联
前端·后端·ai编程
小虎AI生活1 小时前
深入理解多平台内容分发:WorkBuddy + Wechatsync 自动化实践
ai编程
Hyyy1 小时前
AI基础——机器学习
人工智能·ai编程
Jul1en_1 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
ServBay3 小时前
Qwen3.8-Max 开源超大杯正式发布,如何让 AI 无感切换新模型
aigc·ai编程
9i编程3 小时前
搜“干净”它说不知道?我用 Spring AI Alibaba 手写后端,TRAE Work 补齐了全栈
openai·ai编程·trae
摆烂菜鸡沧9964 小时前
【需求分析】基于 GPT-5.6 + Codex 开发个人工具箱 Personal Toolbox 项目
gpt·ai编程·vibecoding
江昪4 小时前
这可能是 AdventureX 上最好玩儿的硬件了
ai编程