3

我应该设计一个组件,它应该通过在 Java 中使用多线程来实现以下任务,因为文件很大/多个,并且任务必须在一个非常短的窗口中发生:

  1. 读取多个 csv/xml 文件并将所有数据保存在数据库中
  2. 根据 txn 类型读取数据库并将数据写入单独的文件 csv 和 xmls 中。(每个文件可能包含不同类型的记录生命文件头、批处理头、批处理页脚、文件页脚、不同的事务和校验和记录)

我对多线程非常陌生,并且对 Spring Batch 进行了一些研究,以便将其用于上述任务。

请让我知道您建议在 Java 或 Spring Batch 中使用传统多线程。这里输入源是多个,输出源也是多个。

4

2 回答 2

4

我建议使用框架中的一些东西,而不是自己编写整个线程部分。我已经非常成功地使用了Sping 的任务和调度计划任务,这些任务涉及从 DB 获取数据、进行一些处理、发送电子邮件、将数据写回数据库)。

于 2012-06-28T21:22:37.047 回答
2

Spring Batch 是实现您的要求的理想选择。首先,您可以使用内置的读取器和写入器来简化您的实现 - 对解析 CSV 文件、XML 文件、通过 JDBC 读取数据库等提供了很好的支持。您还可以获得诸如在失败时重试等功能的好处,跳过无效的输入,如果中间出现故障则重新启动整个作业 - 框架将跟踪状态并从中断处重新启动。自己实现这一切是非常复杂的,要做好这一切需要付出很大的努力。

一旦你用 spring batch 实现了你的批处理作业,它就会为你提供简单的并行化方法。一个步骤可以在多个线程中运行 - 它主要是配置更改。如果您有多个要执行的步骤,您也可以对其进行配置。如果需要,还支持在多台机器上分配处理。实现并行性的大部分工作都是由 Spring Batch 完成的。

我强烈建议您使用 Spring Batch 对几个最复杂的场景进行原型设计。如果可行,您可以继续使用 Spring Batch。自己实现它,尤其是当您不熟悉多线程时,肯定会导致灾难。

于 2012-06-29T05:24:47.487 回答