我已经编写了一个小型的概念验证spring引导/批处理应用程序,它使用jdbc遍历一个非常大的数据库表(可能有数十亿行),并将读取的行转换为xml,然后再将其写入s3存储桶。目前,我的poc有一个从启动开始的作业,它将一直运行直到表被完全消耗。它运行于只有几百行的测试数据上。对于我的单一工作,我使用: JdbcPagingItemReader
习俗 ItemProcessor
将行转换为xml
习俗 ItemWriter
将xml写入s3
我有一些问题,我不知道如何解决使用springbatch。读完手册后,没有什么东西能帮我解决如何进步的问题。为了便于讨论,假设表包含10亿行人员信息,如下所示:
pknamecontation\u datepayload\u data1jim2020-10-10some2bob2020-10-10data3jon2020-10-11in4sue2020-10-14json
如何确保如果spring引导容器被终止,那么作业不会简单地从头开始?考虑到目标表中的容量,处理这些行可能需要一周以上的时间。我考虑过在 JdbcPagingItemReader
所以一次只能读一天(添加一个 WHERE
但不清楚如何:
确保我在两个工作之间传递越来越多的日期?有一种叫做 JobParametersIncrementer
这看起来很有希望,但不清楚它是如何工作的。
如果系统重新启动,如何确保为作业提供正确的启动参数?启动时是否需要查询spring批处理数据库?
与以上相关的是我如何跟踪工作的整体进度?我可以查询从中加载的数据库以获取行数,但我不确定如何获取“当前作业示例的当前作业参数”,以便计算应用程序在处理过程中的距离。
如果有人有任何上述设计技巧,或做了类似的springbatch,请随时添加评论。
暂无答案!
目前还没有任何答案,快来回答吧!