【发布时间】:2019-06-01 02:12:35
【问题描述】:
我有一个包含大约 15 万条记录的 DB2 表。我有另一个具有相同列的 SQL Server 表。表列之一——我们称之为代码——是一个唯一值并被索引。我正在使用 Spring Batch。定期,我会得到一个包含代码列表的文件。例如,一个包含 5 K 个代码的文件。对于文件中的每个代码,我需要从 DB2 表中读取记录,其代码列与文件中的代码匹配,并将这些记录中的一些列插入到 SQL Server 表中。我想使用 SQL 而不是 JPA,并且相信 SQL IN 子句中可以包含多少个值是有限制的(比如说 1000)。这应该是我的块大小吗?
应该如何设计用于执行此操作的 Spring Batch 应用程序?我考虑过以下策略,但需要帮助来决定哪一个(或任何其他)更好。
1) 单步作业,阅读器从文件中读取代码,处理器使用 JdbcTemplate 获取代码块的行,编写器使用 JdbcBatchItemWriter 写入行 - 似乎 JdbcTemplate 在整个作业执行过程中都会有一个开放的数据库连接。
2) JdbcPagingItemReader - Spring Batch 文档提醒 DB2 等数据库具有悲观锁定策略,并建议改用驱动查询
3) 驾驶查询 - 有示例吗? - 处理器如何在这里将密钥转换为完整对象?连接保持打开多长时间?
4) 链接阅读器 - 这可能吗? - 第一个读取器将从文件读取,第二个从 DB2 读取,然后是处理器和写入器。
【问题讨论】:
标签: sql-server db2 spring-batch