【问题标题】:Difference between Spring JDBCTemplate ResultSetExtractor and Spring Batch ItemReaderSpring JDBCTemplate ResultSetExtractor 和 Spring Batch ItemReader 的区别
【发布时间】:2016-05-12 11:34:47
【问题描述】:

我确实有一个大型 MySQL 数据库表(超过 100 万条记录)。我需要读取所有数据并使用 java 语言对它们进行一些处理。

我想通过在内存中获取整个结果集来确保 java 进程不应该消耗更多的内存。

在查看基于光标的实现时,我发现了一些选项,

  1. 使用 Spring JDBCTemplate 覆盖 ResultSetExtractor 或 RowCallbackHandler 并顺序读取行。
  2. 使用 Spring Batch JDBCCursorItemReader/JDBCPagingItemReader 的其他选项。

有人能解释一下这两个选项有什么区别吗?

【问题讨论】:

  • 标签批处理文件用于批处理编程,其中涉及创建执行 cmd 命令的批处理文件。在询问 Spring 批处理或对一批文件进行操作时,不应使用它。有关详细信息,请参阅this
  • 从名称本身可以清楚地看出,spring batch 用于一些定期运行或计划运行的批处理任务JDBCTempllate 抽象了所有与 JDBC 相关的复杂性,例如打开连接、创建语句、读取结果集以及最后将它们全部关闭并提交检查SQLException。现在取决于你想如何以及在哪里使用它?
  • @DennisvanGils,现在更正了。
  • @Braj,从名称上很清楚,但功能方面我想知道区别。我运行了一个简单的程序,它使用 ResultSetExtractor 和 JdbcCursorItemReader 读取数据。对我来说,JDBCTemplate ResultSetExtractor 比 JdbcCursorItemReader 花费了更多时间。我不明白同样的原因。

标签: java mysql spring


【解决方案1】:

如果您需要任何批处理,在您的应用程序端进行一些内部批处理,选项 1 似乎更好。

JdbcCursorItemReader 打开一个新连接,因此不会参与您的应用程序事务。请参阅http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/database/AbstractCursorItemReader.html 的 API。此 API 是 Spring Batch 的一部分。如果您正在编写批处理应用程序,那么它将非常适合。见春季批次

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多