Spring Boot 最佳实践

这篇具有很好参考价值的文章主要介绍了Spring Boot 最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文翻译自国外论坛 medium,原文地址:https://medium.com/@raviyasas/spring-boot-best-practices-for-developers-3f3bdffa0090

Spring Boot 是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧,我们可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长,完整读完文章需要一些时间。

1.正确的包目录风格

  • 正确的包目录将有助于轻松理解代码和应用程序的流程。
  • 我们可以使用有意义的包目录来构建我们的应用程序。
  • 我们可以将所有控制器包含在单独的包中,将服务包含在单独的包中,将 util 类包含在单独的包中等等。这种风格在小型微服务中非常方便。
  • 如果我们正在处理庞大的代码库,则可以使用基于功能模块的方法。我们可以根据我们的要求来决定。

基于类型

基于功能模块

推荐博主开源的 H5 商城项目waynboot-mall,这是一套全部开源的微商城项目,包含三个项目:运营后台、H5 商城前台和服务端接口。实现了商城所需的首页展示、商品分类、商品详情、商品 sku、分词搜索、购物车、结算下单、支付宝/微信支付、收单评论以及完善的后台管理等一系列功能。 技术上基于最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中间件。分模块设计、简洁易维护,欢迎大家点个 star、关注博主。

github 地址:https://github.com/wayn111/waynboot-mall

2.使用设计模式

没什么好说的,设计模式已经是现代编程中编写可维护、可扩展代码的最佳实践。

3.使用 Spring Boot starter

  • 这是 Spring Boot 的一个很酷的功能。
  • 我们可以非常轻松地使用启动器依赖项,而无需一一添加单个依赖项。这些入门依赖项已与所需的依赖项捆绑在一起。
  • 例如,如果我们添加 spring-boot-starter-web 依赖项,默认情况下它会与 jackson、spring-core、spring-mvc 和 spring-boot-starter-tomcat 依赖项捆绑在一起。
  • 所以我们不需要关心单独添加依赖项。
  • 它还可以帮助我们避免版本不匹配。

4.使用生产版本的依赖项

  • 始终建议使用最新的稳定 GA 版本。
  • 有时它可能会因 Java 版本、服务器版本、应用程序类型等而有所不同。
  • 不要使用同一包的不同版本,如果存在多个依赖项,请始终使用 <properties> 指定版本。

5.使用 Lombok

  • 作为一名 Java 开发人员,我们可能听说过 Lombok 项目。
  • Lombok 是一个 Java 库,可用于减少代码并允许我们使用其注释编写干净的代码。
  • 例如,我们可能在某些类(如实体、请求/响应对象、dtos 等)中使用大量的 getter 和 setter 行。
  • 但如果你使用 Lombok,它只是一行,你可以根据你的要求使用@Data、@Getter 或@Setter。
  • 我们也可以使用 Lombok 记录器注释。推荐@Slf4j。

6.将构造函数注入与 Lombok 一起使用

  • 当我们谈论依赖注入时,有两种类型。
  • 一种是“构造函数注入”,另一种是“setter 注入”。除此之外,我们还可以使用非常流行的@Autowired 注释来使用“字段注入”。
  • 但我们强烈建议使用构造函数注入而不是其他类型。因为它允许应用程序在初始化时初始化所有必需的依赖项。
  • 这对于单元测试非常有用。
  • 重要的是,我们可以使用 Lombok 的 @RequiredArgsConstructor 注释来使用构造函数注入。

7.使用 slf4j 日志

  • 日志记录非常重要。
  • 如果我们的应用程序在生产过程中出现问题,日志记录是找出根本原因的唯一方法。
  • 因此,在添加记录器、日志消息类型、记录器级别和记录器消息之前应该仔细考虑。
  • 不要使用 System.out.print()
  • 建议将 Slf4j 与 Spring Boot 中默认的日志框架 logback 一起使用。
  • 始终使用 slf4j 的 {} 占位符语法,避免在记录器消息中使用字符串插值。因为字符串插值会消耗更多的内存。
  • 我们可以使用 Lombok @Slf4j 注释非常轻松地创建日志记录器。
  • 如果我们处于微服务环境中,则可以使用 ELK 技术栈。

8.控制器仅用于路由

  • 控制器专用于路由。
  • 它是无状态且单身的。
  • DispatcherServlet 将检查控制器上的 @RequestMapping
  • 控制器是请求的最终目标,请求将交给服务层并由服务层处理。
  • 业务逻辑不应位于控制器中。

9.使用 Service 层来实现业务逻辑

  • 完整的 Service 层业务逻辑包含验证、缓存等。
  • Service 服务与持久层通信并接收结果。
  • Service 服务也是单例的。

10.避免空指针异常

  • 为了避免 NullPointerException,我们可以使用 java.util 包中的 Optional。
  • 我们还可以使用空安全库。例如:Apache Commons StringUtils
  • 对已知对象调用 equals() 和 equalsIgnoreCase() 方法。
  • 使用 valueOf() 而不是 toString()
  • 使用基于 IDE 的 @NotNull 和 @Nullable 注释。

11.使用集合框架的最佳实践

  • 对我们的数据集使用适当的集合。
  • 将 forEach 与 Java 8 功能结合使用,并避免使用旧版 for 循环。
  • 使用接口类型而不是实现。
  • 使用 isEmpty() 而不是 size() 以获得更好的可读性。
  • 不返回空值,可以返回空集合。
  • 如果我们使用对象作为要存储在基于哈希的集合中的数据,则应重写 equals() 和 hashCode() 方法。

12.使用分页

  • 这将提高应用程序的性能。
  • 如果我们使用 Spring Data JPA,则 PagingAndSortingRepository 使分页的使用变得非常容易且几乎不费吹灰之力。

13.使用缓存

  • 在谈论应用程序性能时,缓存是另一个重要因素。
  • 默认情况下,Spring Boot 通过 ConcurrentHashMap 提供缓存,我们可以通过 @EnableCaching 注解来实现这一点。
  • 如果我们对默认缓存不满意,可以使用 Redis、Hazelcast 或任何其他分布式缓存实现。
  • Redis 和 Hazelcast 是内存缓存方法。我们还可以使用数据库缓存实现。

14.使用自定义异常处理程序和全局异常处理

  • 这在使用大型企业级应用程序时非常重要。
  • 除了一般异常之外,我们可能还会有一些场景来识别某些特定的错误情况。
  • 异常顾问可以使用 @ControllerAdvice 创建,我们可以创建具有有意义细节的单独异常。
  • 它将使得将来识别和调试错误变得更加容易。

15.使用自定义响应对象

  • 自定义响应对象可用于返回包含某些特定数据的对象,并满足 HTTP 状态代码、API 代码、消息等要求。
  • 我们可以使用构建器设计模式来创建具有自定义属性的自定义响应对象。

16.删除不必要的代码、变量、方法和类。

  • 未使用的变量声明将占用一些内存。
  • 删除未使用的方法、类等,因为它会影响应用程序的性能。
  • 尽量避免嵌套循环,我们可以使用 map 代替。

17.使用注释

  • 注释是一个很好的做法。
  • 不要对一切代码发表注释。相反,我们可以使用类、函数、方法、变量等有意义的单词编写描述性代码。
  • 删除注释代码、误导性注释和故事型注释。
  • 我们可以使用注释进行警告,并解释一些乍一看难以理解的内容。

18.对类、方法、函数、变量和其他属性使用有意义的词语。

  • 这看起来很简单,但影响却是巨大的。
  • 始终使用正确的有意义且可搜索的命名约定以及正确的大小写。
  • 通常,我们在声明类、变量和常量时使用名词或短语。例如:字符串 firstName,const isValid
  • 我们可以使用带有形容词的动词和短语来表示函数和方法。例如:readFile()、sendData()
  • 避免使用缩写变量名和意图揭示的名称。例如: int i;字符串 getExUsr;
  • 如果我们有意义地使用此功能,则可以减少声明注释行。由于它具有有意义的名称,新开发人员可以通过阅读代码轻松理解。

19.使用正确的大小写进行声明

  • 有许多不同的大小写,如大写、小写、驼峰命名、帕斯卡命名、蛇命名、大蛇式命名、短横线命名等。

  • 但我们需要确定哪个案例专用于哪个变量。

  • 通常我会遵循如下方式,

    类 — 帕斯卡命名

    方法和变量 — 驼峰命名

    常量 — 大蛇式命名

    数据库相关字段 — 短横线命名

    这只是一个例子,它可能与我们在公司遵循的标准不同。

20.简单点

  • 始终尝试编写简单、可读的代码。
  • 同样简单的逻辑可以用不同的方式实现,但是如果不可读或不理解就很难理解。
  • 有时复杂的逻辑会消耗更多的内存。
  • 编写代码时尝试使用 KISS、DRY 和 SOLID 原则。我将在以后的文章中解释这一点。

21.使用通用的代码格式样式

  • 格式样式因开发人员而异。编码风格的改变也被认为是一种改变,并且会使代码合并变得非常困难。
  • 为了避免这种情况,团队可以采用通用的编码格式。

22.使用 SonarLint 插件

  • 这对于识别小错误和最佳实践非常有用,以避免不必要的错误和代码质量问题。
  • 我们可以将插件安装到我们最喜欢的 IDE 中。

最后

至此本文讲解内容到此完毕感谢阅读,希望本文能对你有所帮助。

关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!文章来源地址https://www.toymoban.com/news/detail-630291.html

到了这里,关于Spring Boot 最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringBoot系列】Spring Boot 3核心技术与最佳实践

    强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: 人工智能 引言 Spring Boot 3 是对 Spring Boot 框架的一个重要更新版本,它延续了 Spring Boot 简化 Spring 应用程序开发的宗旨,进一步提升了开发者体验和应用程

    2024年03月09日
    浏览(69)
  • Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践

    Spring Boot 日志机制和工具用于记录应用程序的日志信息和追踪应用程序的执行过程。它集成了常用的日志框架,如 Log4j、logback、Java Util Logging等,并提供简单易用的配置方式,让开发人员可以方便地监控应用程序的运行状态和性能。在项目启动时,日志已经开始输出,但尚未

    2024年02月08日
    浏览(64)
  • 22 条 Spring Boot 企业级最佳实践,应有尽有,建议收藏!!

    Spring Boot 是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧,我们可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长,完整读完文章需要一些时间。 正确的包目录将有助于轻松理解代码和应用程序的流程。 我们可以使

    2024年02月06日
    浏览(50)
  • 【论坛java项目】第二章 Spring Boot实践,开发社区登录模块:发送邮件、开发注册功能、会话管理、生成验证码、开发登录、退出功能、

    😀如果对你有帮助的话😊 🌺为博主点个赞吧 👍 👍点赞是对博主最大的鼓励😋 💓爱心发射~💓 bofryuzursekbiab——密码 访问邮箱域名 邮箱端口 账号 密码 协议 详细配置 JavaMailSender 是 Spring Email 的核心组件,负责发送邮件 MimeMessage 用于封装邮件的相关信息 MimeMessageHelper 用

    2024年02月06日
    浏览(57)
  • “深入理解Spring Boot:构建独立、可扩展的企业级应用程序的最佳实践“

    标题:深入理解Spring Boot:构建独立、可扩展的企业级应用程序的最佳实践 摘要:Spring Boot是一个强大的框架,可以帮助开发人员快速构建独立、可扩展的企业级应用程序。本文将深入探讨Spring Boot的核心概念和最佳实践,并通过示例代码演示其用法。 正文: 什么是Spring Bo

    2024年02月14日
    浏览(63)
  • 【Spring Boot】Spring Boot实现完整论坛功能示例代码

    以下是一个简单的Spring Boot论坛系统示例代码: 首先是数据库设计,我们创建以下几张表: user表,存储用户信息,包括id、username、password、email、create_time等字段。 topic表,存储帖子信息,包括id、title、content、user_id、create_time等字段。 comment表,存储评论信息,包括id、con

    2024年02月11日
    浏览(37)
  • 基于Spring Boot的校园论坛网站

    🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 基于Spring Boot的校园论坛网站,java项目。 eclipse和idea都能打开运行。 推荐环境配置:eclipse/idea jdk1.8 maven mysql 前端技术:

    2024年02月08日
    浏览(36)
  • 基于Spring Boot+Vue的论坛网站

    末尾获取源码 作者介绍: 大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目: CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 Vue的介绍 2.4 mysql数据库介

    2024年03月14日
    浏览(57)
  • 【java毕业设计】基于Spring Boot+Vue+mysql的论坛管理系统设计与实现(程序源码)-论坛管理系统

    大家好,今天给大家介绍 基于Spring Boot+Vue+mysql的论坛管理系统设计与实现 ,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业设计源码可订阅查看上方【毕业设计】专栏获取哦。 目录  基于Spring Boot+Vue+mysql的论坛管理系统设计与实

    2024年02月12日
    浏览(68)
  • boot-admin 项目数据库缺省字段设计之最佳实践

    数据库(Database)中的缺省字段(也称为默认字段),就是在一般情况下,每个数据表(Table)必须包含的字段(Field),这类字段用于满足特定的数据需求,字段值的填充或更改一般遵照一定的逻辑要求。缺省字段的设计应该考虑到数据的完整性和一致性,以确保数据的正确与

    2024年02月05日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包