🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install github/awesome-copilot/kotlin-springboot

💡 提示:需要 Node.js 和 NPM

使用 Kotlin 开发 Spring Boot 的最佳实践

您的目标是帮助我使用 Kotlin 编写高质量、符合语言习惯的 Spring Boot 应用程序。

项目设置与结构

  • 构建工具: 使用 Maven (pom.xml) 或 Gradle (build.gradle),并包含 Kotlin 插件(kotlin-maven-pluginorg.jetbrains.kotlin.jvm)。
  • Kotlin 插件: 对于 JPA,启用 kotlin-jpa 插件,该插件会自动使实体类成为 open,无需编写样板代码。
  • 启动器: 像在 Java 中一样使用 Spring Boot 启动器(例如,spring-boot-starter-webspring-boot-starter-data-jpa)。
  • 包结构: 按特性/领域组织代码(例如,com.example.app.ordercom.example.app.user),而不是按层。

依赖注入与组件

  • 主构造函数: 始终使用主构造函数进行必需的依赖注入。这是 Kotlin 中最符合语言习惯且最简洁的方法。
  • 不可变性: 在主构造函数中将依赖项声明为 private val。在所有地方优先使用 val 而非 var,以提升不可变性。
  • 组件原型: 像在 Java 中一样使用 @Service@Repository@RestController 注解。

配置

  • 外部化配置: 使用 application.yml,因为它具有良好的可读性和层次结构。
  • 类型安全的属性: 使用 @ConfigurationProperties 配合 data class 创建不可变、类型安全的配置对象。
  • Profile: 使用 Spring Profile(application-dev.ymlapplication-prod.yml)来管理特定于环境的配置。
  • 密钥管理: 切勿硬编码密钥。应使用环境变量或专门的密钥管理工具,如 HashiCorp Vault 或 AWS Secrets Manager。

Web 层(控制器)

  • RESTful API: 设计清晰一致的 RESTful 端点。
  • 用于 DTO 的数据类: 对所有 DTO 使用 Kotlin 的 data class。这将自动提供 equals()hashCode()toString()copy() 方法,并提升不可变性。
  • 验证: 在 DTO 数据类上使用 Java Bean Validation (JSR 380) 的注解(@Valid@NotNull@Size)。
  • 错误处理: 使用 @ControllerAdvice@ExceptionHandler 实现全局异常处理器,以提供一致的错误响应。

服务层

  • 业务逻辑: 将业务逻辑封装在 @Service 类中。
  • 无状态性: 服务应该是无状态的。
  • 事务管理: 在服务方法上使用 @Transactional。在 Kotlin 中,这可以应用于类级别或函数级别。

数据层(仓库)

  • JPA 实体: 将实体定义为类。请记住它们必须是 open 的。强烈建议使用 kotlin-jpa 编译器插件来自动处理此问题。
  • 空安全: 利用 Kotlin 的空安全特性(?),在类型层面清晰地定义哪些实体字段是可选的或必需的。
  • Spring Data JPA: 通过扩展 JpaRepositoryCrudRepository 来使用 Spring Data JPA 仓库。
  • 协程: 对于响应式应用程序,可以在数据层利用 Spring Boot 对 Kotlin 协程的支持。

日志记录

  • 伴生对象记录器: 声明记录器的惯用方法是在伴生对象中。
    companion object {
        private val logger = LoggerFactory.getLogger(MyClass::class.java)
    }
    
  • 参数化日志记录: 使用参数化消息(logger.info("正在处理用户 {}...", userId"))以提高性能和清晰度。

测试

  • JUnit 5: JUnit 5 是默认的测试框架,可以与 Kotlin 无缝协作。
  • 符合语言习惯的测试库: 为了获得更流畅、更符合语言习惯的测试,可以考虑使用 Kotest 进行断言,使用 MockK 进行模拟。它们是为 Kotlin 设计的,提供了更具表现力的语法。
  • 测试切片: 使用 @WebMvcTest@DataJpaTest 等测试切片注解来测试应用程序的特定部分。
  • Testcontainers: 使用 Testcontainers 进行可靠的集成测试,测试与真实数据库、消息代理等的交互。

协程与异步编程

  • suspend 函数: 对于非阻塞的异步代码,在控制器和服务中使用 suspend 函数。Spring Boot 对协程有出色的支持。
  • 结构化并发: 使用 coroutineScopesupervisorScope 来管理协程的生命周期。

📄 原始文档

完整文档(英文):

https://skills.sh/github/awesome-copilot/kotlin-springboot

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。