首页
/ Spring Initializr 集成 Spring gRPC 项目配置指南

Spring Initializr 集成 Spring gRPC 项目配置指南

2025-07-01 09:53:53作者:裘旻烁

Spring Initializr 即将支持 spring-projects-experimental/spring-grpc 项目的快速初始化配置。本文将详细介绍如何在 Spring Boot 项目中配置和使用 Spring gRPC 框架。

项目背景

Spring gRPC 是 Spring 官方实验性项目,为 gRPC 服务提供 Spring Boot 集成支持。gRPC 是一个高性能、开源的通用 RPC 框架,基于 Protocol Buffers 作为接口定义语言(IDL)和底层消息交换格式。

Gradle 配置详解

对于使用 Gradle 构建的项目,需要进行以下配置:

  1. 首先添加必要的插件和依赖:
plugins {
    id 'com.google.protobuf' version '0.9.4'
}

dependencies {
    implementation 'org.springframework.grpc:spring-grpc-spring-boot-starter'
    implementation 'io.grpc:grpc-services'
    testImplementation 'org.springframework.grpc:spring-grpc-test'
}
  1. 配置 Protocol Buffers 插件:
protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc"
    }
    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java"
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {
                option 'jakarta_omit'
            }
        }
    }
}

对于 Kotlin DSL 用户,配置方式略有不同:

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc"
    }
    plugins {
        id("grpc") {
            artifact = "io.grpc:protoc-gen-grpc-java"
        }
    }
    generateProtoTasks {
        all().forEach { task ->
            task.plugins {
                id("grpc") {
                    option("jakarta_omit")
                }
            }
        }
    }
}

Maven 配置详解

对于 Maven 项目,配置相对复杂一些:

  1. 首先定义必要的属性:
<properties>
    <protobuf-java.version>3.25.5</protobuf-java.version>
    <grpc.version>1.63.2</grpc.version>
</properties>
  1. 添加依赖管理:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.grpc</groupId>
            <artifactId>spring-grpc-dependencies</artifactId>
            <version>0.3.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 添加项目依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.grpc</groupId>
        <artifactId>spring-grpc-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-services</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.grpc</groupId>
        <artifactId>spring-grpc-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  1. 添加构建扩展和插件:
<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.7.1</version>
        </extension>
    </extensions>
    
    <plugins>
        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.6.1</version>
            <configuration>
                <protocArtifact>com.google.protobuf:protoc:${protobuf-java.version}:exe:${os.detected.classifier}</protocArtifact>
                <pluginId>grpc-java</pluginId>
                <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
            </configuration>
            <executions>
                <execution>
                    <configuration>
                        <pluginParameter>jakarta_omit</pluginParameter>
                    </configuration>
                    <goals>
                        <goal>compile</goal>
                        <goal>compile-custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

技术要点解析

  1. 依赖管理:Spring gRPC 提供了专门的 BOM(spring-grpc-dependencies)来管理相关依赖版本,确保各组件版本兼容性。

  2. Protocol Buffers 集成:无论是 Gradle 还是 Maven,都需要配置 Protocol Buffers 编译器插件,用于将 .proto 文件编译成 Java 代码。

  3. gRPC 服务支持:grpc-services 依赖提供了 gRPC 的核心服务功能,包括反射服务(方便使用 grpcurl 等工具调试)。

  4. Jakarta 兼容性:配置中的 'jakarta_omit' 选项确保生成的代码与 Jakarta EE 命名空间兼容。

  5. 跨平台支持:Maven 配置中使用 os-maven-plugin 自动检测操作系统架构,下载正确的 protoc 编译器版本。

最佳实践建议

  1. 对于新项目,建议使用 Gradle 构建,配置更为简洁。

  2. 开发环境中,可以添加 Spring 快照仓库以获取最新功能。

  3. 生产环境中,建议锁定所有依赖版本,避免意外升级带来的兼容性问题。

  4. 对于微服务架构,可以考虑将 .proto 文件单独维护在一个共享库中。

随着 Spring gRPC 项目的成熟,这些配置可能会进一步简化,开发者可以关注项目更新以获取更优的集成体验。

登录后查看全文

项目优选

收起
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
15
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
544
409
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
411
38
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
51
55
CangjieMagicCangjieMagic
基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。
Cangjie
582
41
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
298
1.03 K
CS-BooksCS-Books
🔥🔥超过1000本的计算机经典书籍、个人笔记资料以及本人在各平台发表文章中所涉及的资源等。书籍资源包括C/C++、Java、Python、Go语言、数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经~
71
8
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
358
342
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
121
207
RuoYi-Cloud-Vue3RuoYi-Cloud-Vue3
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
101
76