gpt4 book ai didi

java - StoredProcedureItemReader 和 JdbcCursorItemReader 的游标数据保留在 java 堆内存中还是数据库中

转载 作者:行者123 更新时间:2023-12-01 12:08:52 25 4
gpt4 key购买 nike

在 Spring-batch 中,通常当我们使用任何 itemreader 时,它会在每次调用 read 方法时获取每一行,并且一旦等于提交间隔,它就会将数据发送到 writer。

我已经读到 StoredProcedureItemReader 和 JdbcCursorItemReader 是基于游标的阅读器,一旦执行查询,数据就在游标中,并且读取方法在每次调用中都会进入行。

但是,我的问题是这个游标驻留在 java 内存或数据库中:-1.如果它一次获取java内存中的所有数据,那么批处理的优势是什么,因为应用程序将有可能变慢或内存不足。2. 如果它在数据库中的某个位置,则 Storeprocedor 或 JDBC 连接本身将计时,直到所有记录都在处理中获取。

我试图找到答案,但在文档中没有找到任何地方,也不知道自己测试一下才能确定。我对我来说似乎很重要,好像有些人要使用这些阅读器,他们需要增加连接超时或者需要更多的堆内存。

最佳答案

是的,使用 StoredProcedureItemReader,可以获取整个批处理。这是因为许多驱动程序(包括一些 Oracle 的驱动程序)不支持批处理 CallableStatements。有些人会失败,有些人会默默地忽略你。因此,为了保持一致,Spring Batch 根本不允许对存储过程进行批处理。

某些数据库驱动程序(例如 IBM Informix 驱动程序)允许根据连接字符串中的参数进行自动批处理;换句话说,如果可能的话,它会进行批处理,而无需显式控制它,但有一些注意事项。如果在您的用例中,您绝对需要批处理存储过程并且不想编写自定义 ItemReader 或 ItemWriter,那么这可能是您的一个选择。

关于java - StoredProcedureItemReader 和 JdbcCursorItemReader 的游标数据保留在 java 堆内存中还是数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com