Spring 数据 REST - 对数据库的前 10 次调用非常慢

Spring Data REST - First 10 calls to DB are very slow

问题描述

启动我的 Spring 引导应用程序后,通过 JPA/Hibernate 连接到 Postgres 数据库并使用 Spring Data REST,前 10 个调用是通过 REST API 到应用程序非常非常慢(从 5-10 秒不等)。

项目设置和配置

我有一个父“模板”项目,通过它可以为子项目提供一个通用域模型。然后这些在每个子项目中可用,包括父项目中的所有其他 bean。

设置如下所示:

对于父项目:

  1. 我自己的通用父 POM(使用 spring-boot-starter-parent 以及其他依赖项)

    | ...是

    的父 POM
  2. 父项目(Spring Boot/Spring 数据 REST,提供通用 beans)

对于子项目:

  1. 我自己的通用父POM(同上)

    | ...是

    的父 POM
  2. 子项目 -> 有父项目作为依赖项

预期和实际结果

我尝试在两个项目中创建(通过 HTTP POST,使用 REST API)同一实体的多个实例。使用 父项目 ,实体的创建时间约为 0.1 秒,始终如一。但是在 Subproject 中,前 10 个 - 并且始终恰好是 10 个 - HTTP 调用(POST 和 GET)非常慢,每个请求最多 10 秒,完全相同实体。预期行为是看到与第一次调用相同的速度。

在这前 10 个请求之后,性能与父项目相似。

我不知道为什么会出现这种行为。如果有人有建议,将不胜感激!

我通过查看 Hibernate 正在执行的 SQL 查询解决了这个问题。我正在使用 InheritanceType.TABLE_PER_CLASS。正因为如此——正如许多在线文档也提到的那样——在处理大量实体类型时,性能可能会严重下降,在我扩展基础项目的情况下就是这种情况。必须执行太多 UNION 和 JOIN 查询。通过切换到 InheritanceType.SINGLE_TABLE,它再次以极快的速度运行!