首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA从DB获取ResultSet,将它们隔离在不同的文件中,将这些文件发送到不同的电子邮件ID

JAVA从DB获取ResultSet,将它们隔离在不同的文件中,将这些文件发送到不同的电子邮件ID
EN

Stack Overflow用户
提问于 2017-10-23 18:05:37
回答 3查看 118关注 0票数 0

我在努力解决一个问题。问题语句是同时启动多个线程。每个线程的责任都是从DB中获取记录。所有的记录都会有groupID。意思是如果我们有100000张有10个不同的组if的唱片.将创建10个文件,并在每个文件中记录相应的数量。现在我们需要将这10个文件发送到10个不同的来源。

如何在Spring中配置相同的..?应该使用哪种设计模式?如果你有什么例子请告诉我。

我使用属性文件来提供SQL语句,这些语句将返回结果集,然后将它们存储在临时文件中。这些文件是我通过电子邮件发送的。但我无法通过组i和不同的邮件进行隔离。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-24 06:07:52

如果我们分析了问题,下面是我们想要执行的步骤。

  1. 从DB中提取记录。
  2. 按groupId对它们进行排序。
  3. 在diff文件中使用不同的groupId转储记录。
  4. 用电子邮件将文件发送给一组人。

其中的#1&2可以由主线程执行的SQL来完成。任务3& 4可以通过为每个groupId生成一个工作线程来完成。您可以使用BlockingQueue来放置记录,这些记录将由工作线程使用。

如何在Spring中配置相同的..?您可以使用Spring批处理应用程序。

应该使用哪种设计模式?我建议,生产者/消费者设计模式。http://javarevisited.blogspot.in/2012/02/producer-consumer-design-pattern-with.html

票数 -1
EN

Stack Overflow用户

发布于 2017-10-23 18:33:35

你可以通过多种方式做到这一点。我建议你们两个:

1)使用Spring,您可以轻松地处理记录的多线程批处理并将其写入文件。

2)使用简单的执行器服务使其多线程。

一些建议:

  • 不要写入从DB读取的每个记录上的文件。相反,使用由所有线程共享的同步Map<GroupId, List<Record>> map,并在根据GroupId使用上面的映射完成隔离时写入文件。
  • 如果希望根据任何参数对记录进行排序,请使用SortedList<Record>
  • 如果记录的数量很大,您可以用卡盘写入文件,例如,每次读取10000条记录时都要写,然后清空地图,然后重新开始。

PS :这可能不是最好的方法,但我会这样做来解决这个问题的陈述。希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-10-27 04:57:35

你好,盖兹,谢谢你的帮助和建议。我尝试了结合你的想法,以一种风险更低的方式。

我的问题是多个线程正在运行,这些线程正在接收来自DB的数据,并基于组ID填充文件。**来自DB的组ID也将在多个线程中可用,而且我还需要包含组ID的数据的文件,但不应该将2个或更多的线程数据转储到一个文件中。所以我遵循了下面的方法。

Abstract_DAO,V,Abstract_Handler,V,Thread_1_Handler_IMPL,Thread_2_Handler_IMPL。

Post Thread start,我将从JSON / properties文件中获取每个组ID的所有属性。地图。在运行时使用此映射"PropClass“获取writer/file/email/email_text/cc/file_temp_location.另外,对于每个线程,我将提供一个单独的临时位置,这样文件就不会相互引用。此映射是并发的,在多个线程中使用。通过这种方式,我每天能够从2000万客户的数据库中生成500000份报告。

如果我们能即兴运用这个方法,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46895780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档