大数跨境
0
0

瞧瞧老外总结的SpringBoot最佳实践

瞧瞧老外总结的SpringBoot最佳实践 Spring全家桶实战案例
2024-06-16
0
导读:Spring Boot开发最佳实践

环境:SpringBoot3.2.5



以下是关于SpringBoot一些最佳实践和一些技巧,你可以使用它们来改进你的Spring Boot应用程序并使其更高效。(本篇文章翻译自外文)

1. 适合的包风格

  • 正确的包将有助于轻松理解代码和应用程序的流程

  • 使用有意义的包来构建应用程序

  • 可以将所有Controller包含到一个单独的包中,将Service包含在一个单独包中,还可以将util类包含在另一个包中…等等。这种风格在小型微服务中非常方便

  • 如果你正在处理一个巨大的代码库,可以使用基于功能的方法

基于类型

基于功能

2. 使用设计模式

  • 毫无疑问,设计模式已经是最佳实践了

  • 但你必须确定可以使用它们的地方


3. 使用Spring Boot Starters

  • 我们可以非常容易地使用starter依赖项,而无需逐个添加单个依赖项。这些starter依赖项已经与所需的依赖项绑定在一起

  • 例如,如果我们添加spring-boot-starter-web依赖项,默认情况下它与jackson、spring-core、spring-mvc和spring-boot-starter-tomcat依赖项捆绑在一起

  • 因此,我们不需要关心单独添加依赖项

  • 此外,它还帮助我们避免版本不匹配


4. 使用正确版本的依赖项

  • 始终建议使用最新的稳定GA版本

  • 有时,它可能会因Java版本、server版本、应用程序类型等而异

  • 不要使用同一个包的不同版本,如果存在多个依赖项,请始终使用<properties>指定版本。

5. 使用Lombok

因公司要求不同,我们是禁止使用这玩意的,所以就不说了。

6. 使用构造函数注入

@Servicepublic class UserService {  private final UserRepository userRepository ;  public UserService(UserRepository userRepository) {    this.userRepository = userRepository ;  }}

构造函数注入允许应用程序在初始化时初始化所有必需的依赖项。

7. 使用SLF4J日志

private static final Logger logger = LoggerFactory.getLogger(UserService.class) ;
public void save(String name) {  logger.info("参数信息: {}", name) ;}
  • 日志记录非常重要

  • 如果应用程序在生产过程中出现问题,记录日志是找出根本原因的唯一方法

  • 因此,在添加记录器、日志消息类型、记录器级别和记录器消息之前,你应该仔细考虑

  • 不用使用System.out.println()

  • Slf4j建议与logback一起使用,logback是Spring Boot中的默认日志框架

  • 始终使用slf4j{},并避免在logger消息中使用字符串插值。因为字符串插值会消耗更多的内存。

  • 如果你处于微服务环境中,则可以使用ELK栈


8. 仅在路由时使用控制器

  • 控制器专用于路由

  • 它是无状态的和单例的

  • DispatcherServlet将检查控制器上的@RequestMapping

  • 控制器是请求的最终目标,然后请求将被移交给服务层并由服务层处理

  • 业务逻辑不应在控制器中


9. Service用于业务逻辑

  • 完整的业务逻辑包括验证、缓存等

  • Service层与持久层通信并接收结果

  • Service也应该是单例的


10. 避免NullPointerException

  • 为了避免NullPointerException,您可以使用java.util包中的Optional

  • 也可以使用null安全库。例如:Apache Commons StringUtils

  • 在已知对象上调用equals()和equalsIgnoreCase()方法

  • 在toString()上使用valueOf()

  • 使用基于IDE的@NotNull和@Nullable注释


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

  • 为你的数据集使用适当的集合

  • 将forEach与Java 8功能结合使用,避免使用遗留的for循环

  • 使用接口类型而不是实现

  • 使用isEmpty()而不是size()可获得更好的可读性

  • 不返回null值,可以返回空集合

  • 如果使用对象作为要存储在基于哈希的集合中的数据,则应重写equals()和hashCode()方法


12. 使用分页

  • 这将提高应用程序的性能

  • 如果您使用的是Spring Data JPA,PagingAndSortingRepository使使用分页变得非常容易,而且几乎不需要付出什么努力

public interface CustomerRepository extends JpaRepository<Customer, Integer> {}

通过上面集成JpaRepository将使得分页变得非常简单。

13. 使用缓存

  • 当谈到应用程序性能时,缓存是另一个重要因素

  • 默认情况下,Spring Boot使用ConcurrentHashMap提供缓存,您可以通过@EnableCaching注释实现这一点

  • 如果你对默认缓存不满意,可以使用Redis、Hazelcast或任何其他分布式缓存实现

  • Redis和Hazelcast是内存缓存方法。您还可以使用数据库缓存实现


14. 将自定义异常处理程序与全局异常处理一起使用

  • 在使用大型企业级应用程序时,这一点非常重要

  • 除了一般的例外情况,我们可能有一些场景来识别一些特定的错误案例

  • 异常顾问可以使用@ControllerAdvice创建,我们可以创建具有有意义细节的单独异常

  • 这将使识别和调试错误变得更加容易


15. 自定义响应

  • 自定义响应对象可用于返回具有一些特定数据要求的对象,如HTTP状态码、API代码、消息等

  • 我们可以使用builder设计模式来创建具有自定义属性的自定义响应对象


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

  • 未使用的变量声明将获取一些内存

  • 删除未使用的方法、类等,因为这会影响应用程序的性能

  • 尽量避免嵌套循环。你可以使用Maps


17. 使用注释

  • 注释是一种很好的做法,除非你滥用它

  • 不要对每件事都注释。相反,你可以使用有意义的单词来描述类、函数、方法、变量等

  • 删除注释代码、误导性注释和故事类型注释

  • 你可以使用注释来表示警告,并解释一些乍一看很难理解的东西


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

  • 始终使用有意义的、可搜索的命名规范和正确的大小写

  • 通常,我们在声明类、变量和常量时会使用名词或简短的短语。例如:String firstName、const isValid

  • 函数和方法可以使用动词和短语搭配形容词。例如:readFile(), sendData()

  • 避免使用缩写变量名和意图。例:int i;字符串getExUsr


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

  • — PascalCase

  • 方法&变量— camelCase

  • 常量 — SCREAMING_SNAKE_CASE

  • 数据库字段 — snake_case


20. 使用通用的代码格式化样式

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

21. 使用SonarLint

SonarLint是一款代码质量检查工具,使用它对于识别小bug和最佳实践非常有用,可以避免不必要的bug和代码质量问题,你可以将插件安装到IDE中。

以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏

推荐文章

SpringBoot这2个接口非常实用,你们都用来做什么?

请一定掌握SpringBoot这4个高级开发技巧

SpringBoot中Controller接口参数还可以这样玩?

警惕!SpringBoot错误发布事件,造成死锁Deadlock

SpringBoot3第三方接口调用10种方式,最后一种你肯定没用过

SpringBoot非常实用的一个功能,你肯定不知道

SpringBoot通过编程式事务提高系统性能

必须掌握SpringBoot强大的自定义属性配置

SpringBoot项目中这10个开发技巧你都知道吗?

必须掌握SpringBoot强大的日志功能

SpringBoot3使用虚拟线程一定要小心了

Spring6.2新特性@Fallback候选Bean

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读38
粉丝0
内容832