我在努力解决一个问题。问题语句是同时启动多个线程。每个线程的责任都是从DB中获取记录。所有的记录都会有groupID。意思是如果我们有100000张有10个不同的组if的唱片.将创建10个文件,并在每个文件中记录相应的数量。现在我们需要将这10个文件发送到10个不同的来源。
如何在Spring中配置相同的..?应该使用哪种设计模式?如果你有什么例子请告诉我。
我使用属性文件来提供SQL语句,这些语句将返回结果集,然后将它们存储在临时文件中。这些文件是我通过电子邮件发送的。但我无法通过组i和不同的邮件进行隔离。
发布于 2017-10-24 06:07:52
如果我们分析了问题,下面是我们想要执行的步骤。
其中的#1&2可以由主线程执行的SQL来完成。任务3& 4可以通过为每个groupId生成一个工作线程来完成。您可以使用BlockingQueue来放置记录,这些记录将由工作线程使用。
如何在Spring中配置相同的..?您可以使用Spring批处理应用程序。
应该使用哪种设计模式?我建议,生产者/消费者设计模式。http://javarevisited.blogspot.in/2012/02/producer-consumer-design-pattern-with.html
发布于 2017-10-23 18:33:35
你可以通过多种方式做到这一点。我建议你们两个:
1)使用Spring,您可以轻松地处理记录的多线程批处理并将其写入文件。
2)使用简单的执行器服务使其多线程。
一些建议:
Map<GroupId, List<Record>> map,并在根据GroupId使用上面的映射完成隔离时写入文件。SortedList<Record>。PS :这可能不是最好的方法,但我会这样做来解决这个问题的陈述。希望这能有所帮助。
发布于 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份报告。
如果我们能即兴运用这个方法,请告诉我。
https://stackoverflow.com/questions/46895780
复制相似问题