小编GJo*_*nes的帖子

为什么在 Spring Boot 应用程序中加载大量数据时 JPA/Hibernate 会变慢?

当在 RestCall 中使用 Spring Data 时,会有一个 Session,Hibernate 在其中缓存数据。在一个 RestCall 中加载一个新实体会导致 Hibernate 缓存该实体,直到 RestCall 完成。当加载大量数据时,Sprng 会显着减慢,因为 Hibernate 正在积累更多数据。Java 实体没有被收集,因为 Hibernate 仍然有对它的引用。

在以下代码中,前约 100 个实体按预期进行处理。之后,此 RestCall 中的执行速度逐渐减慢。现在的问题是为什么这会减慢 RestCall 代码的执行速度。有足够的 RAM 可用,即使没有,我也希望抛出 OOM。为什么越来越慢?元素数量少于 1500,对于 Java/Spring 来说不应该成为问题。

        public void someMethodCalledFromRestController() {
          List<String> allRelevantNumbers = someService.findNumbers();
          for (String number : allRelevantNumbers) {
              List<Customers> customersGroup = someService.findActiveCustomersByNumber(number); // includes a repository.find(); method
              this.workOnCustomerGroup(customersGroup);
          }
        }

        ....


        public void workOnCustomerGroup(List<Customers> customersGroup) {
        try {
            LocalDateTime startWorkTime = LocalDateTime.now();
            Result result = someService.doSomeWork(customersGroup);
            resultService.createResult(result); // includes repository.save();

// …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa spring-data spring-boot

3
推荐指数
1
解决办法
2572
查看次数

标签 统计

hibernate ×1

jpa ×1

spring ×1

spring-boot ×1

spring-data ×1