Spring Boot 最佳实践(1)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文翻译自国外论坛 medium,原文地址:medium.com/@raviyasas/…,原文作者:Ravi YasasSpring Boot 是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧,我们可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长,完整读完文章需要一些时间。

本文翻译自国外论坛 medium,原文地址:medium.com/@raviyasas/…,原文作者:Ravi Yasas

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

1.正确的包目录风格

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

基于类型

image.png

基于功能模块

image.png

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

github 地址:github.com/wayn111/way…

2.使用设计模式

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

3.使用 Spring Boot starter

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

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

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

image.png

5.使用 Lombok

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

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

image.png

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

7.使用 slf4j 日志

image.png

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

8.控制器仅用于路由

image.png

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

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

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

10.避免空指针异常

image.png

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

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

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

12.使用分页

image.png

  • 这将提高应用程序的性能。
  • 如果我们使用 Spring Data JPA,则 PagingAndSortingRepository 使分页的使用变得非常容易且几乎不费吹灰之力。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
JSON 缓存 Java
优雅至极!Spring Boot 3.3 中 ObjectMapper 的最佳实践
【10月更文挑战第5天】在Spring Boot的开发中,ObjectMapper作为Jackson框架的核心组件,扮演着处理JSON格式数据的核心角色。它不仅能够将Java对象与JSON字符串进行相互转换,还支持复杂的Java类型,如泛型、嵌套对象、集合等。在Spring Boot 3.3中,通过优雅地配置和使用ObjectMapper,我们可以更加高效地处理JSON数据,提升开发效率和代码质量。本文将从ObjectMapper的基本功能、配置方法、最佳实践以及性能优化等方面进行详细探讨。
72 2
|
28天前
|
消息中间件 监控 Java
Spring Boot 3.3 后台任务处理:最佳实践与高效策略
【10月更文挑战第10天】 在现代应用程序中,后台任务处理对于提高应用程序的响应性和吞吐量至关重要。Spring Boot 3.3提供了多种机制来实现高效的后台任务处理,包括异步方法、任务调度和使用消息队列等。本文将探讨这些机制的最佳实践和高效策略。
72 0
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
50 2
|
4月前
|
监控 安全 Java
Spring Boot最佳实践:从入门到精通
Spring Boot最佳实践:从入门到精通
|
4月前
|
开发框架 Java 数据库
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践
|
4月前
|
开发框架 Java 数据库
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践
|
4月前
|
开发框架 Java API
使用Spring Boot构建RESTful API的最佳实践
使用Spring Boot构建RESTful API的最佳实践
|
4月前
|
监控 Java API
使用Spring Boot构建微服务架构的最佳实践
使用Spring Boot构建微服务架构的最佳实践
|
4月前
|
开发框架 监控 Java
Spring Boot中的反应式编程最佳实践
Spring Boot中的反应式编程最佳实践
|
4月前
|
Java 开发工具 数据安全/隐私保护
Spring Cloud中的分布式配置管理最佳实践
Spring Cloud中的分布式配置管理最佳实践