当前位置: 首页 > 知识库问答 >
问题:

写入和读取数据库的多线程批处理

卢翔宇
2023-03-14

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

  1. 读取多个csv/xml文件并将所有数据保存在数据库中
  2. 读取数据库并将数据写入单独的csv文件

我对多线程很陌生

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

共有2个答案

公子昂
2023-03-14

Spring Batch是实现您的需求的理想选择。首先,您可以使用内置的读写器来简化您的实现—它非常支持解析CSV文件、XML文件、通过JDBC从数据库读取数据等。您还可以获得一些功能,如在出现故障时重试、跳过无效的输入、在两者之间出现故障时重新启动整个作业—框架将跟踪状态

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

我强烈建议您使用Spring批处理创建两个最复杂的场景原型。如果成功,您可以继续使用Spring Batch。独自实现它,尤其是当您刚接触多线程时,肯定会导致灾难。

唐康安
2023-03-14

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

 类似资料:
  • 在我们的Java应用程序中,我需要从oracle数据库中读取8000万记录。我试图为此重新设计多线程程序。目前,我们使用Java5个线程池,10个线程基于主键模式并行读取数据库。每个线程将读取不同的模式,如001*和002*。 如何提高该计划的性能?我正在考虑设计模式,让引导线程读取数据库并将处理委托给子线程。在我们现有的设计中,不同的线程通过10个jdbc连接访问表。使用新方法,我将只有一个线程

  • 我正在开发一个应用程序(控制台),其中包含一个while循环,我希望允许用户暂停和恢复。经过一些研究,似乎一个额外的线程负责等待用户输入是正确的解决方案。 我已经能够实现持续等待输入的额外线程,并且还有一个kill方法,它设置flag变量来停止线程while()循环。不幸的是,除非有输入,否则while循环不会结束,只有在输入线程的while环至少完成一次后,这个kill标志才会生效。由于主线程也

  • 我必须使用Spring Batch配置一个作业。是否可以有一个单线程的项目阅读器,但多线程处理器? 在这种情况下,ItemReader将通过从数据库中读取工作项(通过执行预定义的查询)来创建要处理的工作项,每个处理器将并行处理项/块。

  • 试图找出是否有人问过这个问题,但没有。 问题就在这里。以下必须通过Spring batch实现,有一个文件需要读取和处理。项读取器不是线程安全的。计划是让多线程同构处理器和多线程同构写入器通过单线程读取器读取项目。 有点像下面: 尝试了AsyncItemProcessor和AsyncItemWriter,但在处理器上保留调试点导致在释放该点(即单线程处理)之前不执行读取器。 任务执行程序已尝试如下

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。