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();
}
相关推荐
Warson_L12 小时前
独立开发推荐安装的skills
ai编程
threerocks12 小时前
一用一个不吱声的视频解析 Skill,你值得拥有
aigc·ai编程
吴佳浩14 小时前
AI 工程师知识地图:模型格式、框架、部署工具一次讲明白
人工智能·aigc·ai编程
青木_JS15 小时前
Headroom 是怎么给 Codex 省 Token 的:策略、效果与一次历史恢复记录
ai编程
MomentYY15 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
Java陈序员15 小时前
企业级!一个基于 Java 开发的开源 AI 应用开发平台!
spring boot·agent·mcp
小九九的爸爸17 小时前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
AlbertZein17 小时前
别只盯着最强模型了,Agent 场景更该看这类 Flash 档模型
aigc·openai·ai编程
ZzT17 小时前
公司用 AI 筛简历,他写了个 AI 帮你挑公司
面试·aigc·ai编程
妙码生花17 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十四):眨眼小人登录页制作
前端·javascript·ai编程