搜索
首页Java如何监控 Spring Data JPA 流

php小编柚子为您带来关于监控Spring Data JPA流的java问答。在开发过程中,监控数据流的实时情况对于系统性能优化和故障排除至关重要。本文将介绍如何监控Spring Data JPA流,让您更好地了解数据处理过程,及时发现问题并进行相应处理。一起来探讨如何有效监测Spring Data JPA流,提升系统稳定性和性能!

问题内容

我正在尝试按照此博客上的说明使用 spring data jpa 流。但是,我无法通过任何日志监控该过程或进度。当进程尝试批量提取数据时,我是否应该看到日志中打印多个 sql 查询?如果不是,那么我怎么知道所有行都没有一次性加载?

其他博客(例如此博客和此博客)建议我应该将 mysql 的 hint_fetch_size 设置为 integer.min_value ,我认为这可能是解决方案,但这会引发以下异常:

2024-01-29 14:40:20.843 警告 78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper:sql 错误:0,sqlstate:s1000 2024-01-29 14:40:20.843错误78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper:流式传输结果集com.mysql.cj.protocol.a.result.resultsetrowsstreaming@ 4ca63fa5 仍然活跃。当任何流结果集在给定连接上打开并使用时,不得发出任何语句。在尝试更多查询之前,请确保您已对任何活动的流结果集调用 .close()。 结束时间:48 org.springframework.orm.jpa.jpasystemexception:无法提取结果集;嵌套异常是 org.hibernate.exception.genericjdbcexception:无法提取 resultset 在 org.springframework.orm.jpa.vendor.hibernatejpadialect.converthibernateaccessexception(hibernatejpadialect.java:331)

这是我的存储库代码:

@QueryHints(value = {
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true"),
})
@Query("SELECT s FROM Salary s")
Stream<Salary> findAllStream();

我想我想得到一个保证,如果以上是在 spring data jpa 中使用 stream 查询的正确方法,因为我自己无法可靠地监控 streaming 的性能?

更新

上述异常是由于在同一调用方法中重复调用 findallstream 方法而发生的。删除其中一个修复了该异常。

解决方法

我找不到任何日志配置来显示数据是否正在批量提取。但我确实找到了一种在本地测试性能的方法。

为了测试流功能,我需要访问包含数百万条记录的数据库。我使用 docker 映像 https://www.php.cn/link/7092d5eb1bbca1a22bdc69ba3f517e68 来使用 mysql 员工数据

设置 docker 映像后,我在将 mysql workbench 与服务器连接时遇到问题。看起来 docker 映像未配置为接受默认设置的 ssl 连接。我必须禁用 use ssl 标志才能建立连接。此设置出现在 mysql 工作台的 ssl 选项卡下。

应用程序中的连接字符串也必须按以下方式配置:

spring.datasource.url=jdbc:mysql://localhost:3307/employees?verifyservercertificate=false&usessl=false&requiressl=false

员工数据库中的数据包含一个名为 salaries 的表,该表约有 280 万行。

为了进行测试,我编写了一个小型 spring data jpa 应用程序,该应用程序在存储库类中具有以下方法以及一个简单的控制器来调用这些方法:

@Override
List<Salary> findAll();

@QueryHints(value = {
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true"),
})

@Query("SELECT s FROM Salary s")
Stream<Salary> findAllStream();

然后我编写了一小段代码,将读取的数据转换为 json 对象,然后使用多个线程写回到文件中。这是为了模拟现实案例中的处理。

这是我观察到的。

  • 使用 list 方法时,内存使用量显着增加。最初的查询花费了大部分时间,但是当所有数据加载完毕后,实际的数据处理任务很快就完成了。

  • 使用 stream 方法时,对内存使用的影响几乎不明显。但总体来说,与list方法相比,完成处理部分的性能相似甚至更差。

结论

我的上述发现使我得出结论,存储库方法的 stream 返回类型仅应在存在内存不足风险时使用,即获得 out 内存异常 。否则,如果您的应用程序已经在足够大的服务器上运行,则对内存使用的总体影响几乎不会被注意到,并且只有在您的进程快速完成时才会是暂时的。

来自 intellij profiler 的内存使用统计信息

  • left -> 当列表方法运行时
  • 右 -> 当流方法运行时

以上是如何监控 Spring Data JPA 流的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:stackoverflow。如有侵权,请联系admin@php.cn删除
如何在Linux系统中利用PHP脚本进行日志监控如何在Linux系统中利用PHP脚本进行日志监控Oct 05, 2023 am 11:36 AM

如何在Linux系统中利用PHP脚本进行日志监控随着Linux系统的广泛应用,对于系统的监控和日志分析变得越来越重要。而其中,使用PHP脚本进行日志监控是一种常见的方式。本文将介绍如何使用PHP脚本实现简单的日志监控,并提供具体的代码示例。一、创建PHP脚本文件首先,在Linux系统上创建一个名为“log_monitor.php”的文件,该文件将用于监控指定

如何通过Linux工具实现日志监控和警报?如何通过Linux工具实现日志监控和警报?Jul 28, 2023 pm 08:41 PM

如何通过Linux工具实现日志监控和警报?在日常的服务器管理和运维过程中,实时监控和分析日志是非常重要的。Linux系统提供了一些强大的工具,可以帮助我们实现日志监控和警报的功能。本文将介绍如何使用Linux工具来监控和警报日志,并提供一些代码示例。使用tail命令实时查看日志tail命令可以实时查看日志文件的更新内容。通过使用tail命令,我们可以在终端窗

解决Linux服务器日志丢失问题的方法解决Linux服务器日志丢失问题的方法Jun 30, 2023 pm 04:37 PM

如何解决Linux服务器上的系统日志丢失问题摘要:在Linux服务器上,系统日志对于监控和故障排除非常重要。然而,有时候系统日志可能会丢失或未能正常记录,给故障排查造成困扰。本文将介绍一些解决方案,帮助解决Linux服务器上的系统日志丢失问题。引言:在Linux服务器上,系统日志是一种非常重要的资源,它用于记录系统和应用程序的运行状态、错误信息、警告信息以及

深入探究:Golang如何实现文件监控功能深入探究:Golang如何实现文件监控功能Feb 23, 2024 am 09:27 AM

Golang作为一种高效、简洁的编程语言,在文件处理方面有着出色的表现。其中,文件监控是一个非常常见且有用的功能,可以帮助我们实时监测文件系统中的变化,从而及时做出相应的处理。本文将深入探究Golang如何实现文件监控功能,并提供具体的代码示例,帮助读者更好地理解和应用这一功能。为何需要文件监控功能?在现代软件开发过程中,文件操作是一个非常重要的环节。特别是

源码编译安装PHP PDO MySQL:实用技巧与注意事项源码编译安装PHP PDO MySQL:实用技巧与注意事项Mar 07, 2024 pm 09:27 PM

源码编译安装PHPPDOMySQL:实用技巧与注意事项PHP是一种广泛应用的服务器端脚本语言,而MySQL是一个流行的开源关系型数据库管理系统,两者结合使用能够为网站开发提供强大的支持。在实际开发中,经常需要使用PHPPDO扩展来连接MySQL数据库,以实现数据的存储与操作。本文将介绍如何通过源码编译安装PHP,并配置PDO连接MySQL的方法,同时提

如何解决Oracle服务丢失的问题?如何解决Oracle服务丢失的问题?Mar 08, 2024 pm 04:27 PM

解决Oracle服务丢失的问题Oracle数据库是众多企业和组织首选的关系型数据库管理系统,但在实际使用过程中,有时会遇到数据库服务丢失的情况,影响系统正常运行。本文将介绍如何解决Oracle服务丢失的问题,并给出具体的代码示例,帮助读者更好地处理这一常见的数据库故障。一、检查Oracle服务状态在解决Oracle服务丢失问题前,首先需要确认服务的当前状态。

MySql的日志监控:如何快速检测和分析MySQL的错误和异常MySql的日志监控:如何快速检测和分析MySQL的错误和异常Jun 15, 2023 pm 09:42 PM

随着互联网和大数据时代的到来,MySQL数据库作为一种常用的开源数据库管理系统,被越来越多的公司和组织所采用。但是,在实际的应用过程中,MySQL数据库也会出现各种各样的错误和异常,如系统崩溃、查询超时、死锁等。这些异常对系统的稳定性和数据的完整性会造成严重的影响,因此,快速检测和分析MySQL的错误和异常是一项非常重要的工作。日志监控是MySQL的重要功能

如何进行PHP秒杀系统的日志监控和故障排查如何进行PHP秒杀系统的日志监控和故障排查Sep 19, 2023 am 08:24 AM

如何进行PHP秒杀系统的日志监控和故障排查引言:随着电商行业的快速发展,秒杀活动成为吸引消费者的一种重要方式。而在秒杀活动中,系统的稳定性和高并发处理能力是至关重要的。为了保证秒杀系统的正常运行,需要进行日志监控和故障排查。本文将介绍如何使用PHP进行秒杀系统的日志监控和故障排查,并提供一些代码示例。一、日志监控设置日志级别在秒杀系统的配置文件中,我们可以设

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具