2012-04-04 96 views
0

我正在寻找一种模式和/或框架,可以以易于配置的方式对以下问题进行建模。快速多线程在线处理应用程序框架建议

每说3分钟,我需要有一整套的工作中,将同时创下Web服务来获取最新版本数据的Web应用程序上下文揭开序幕,并推动其关闭到数据库。问题是数据库将被大量使用来读取数据,从而对数据执行大量复杂的计算。我们目前正在使用spring,所以我一直在寻找Spring Batch来运行这个过程吗?有没有人有任何使用Spring或类似系统的其他技术的建议/模式/示例?

+0

不清楚你的问题是:a-调度; b-缩放。 – alphazero 2012-04-04 14:50:35

+0

有点两者。调度部分可以通过多种方式完成。我正在寻找一个Spring-Batch或其他Spring组件,理想情况下可以使用可配置数量的线程来完成此类处理。主要寻找如何做到这一点的指针。 – Cromat 2012-04-04 15:00:45

回答

1

我们使用的ServletContextListener当我们需要处理重复运行揭开序幕TimerTasks在我们的Web应用程序。 ServletContextListener在应用程序服务器启动应用程序或应用程序重新启动时启动。然后,计时器任务就像一个单独的线程,在指定的时间段内重复您的代码。

的ServletContextListener http://www.javabeat.net/examples/2009/02/26/servletcontextlistener-example/

的TimerTask http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html

+0

在你的情况下,这是否启动了多线程任务?我可能只是在运行任务内部执行此操作,然后拆分,但我需要。 – Cromat 2012-04-04 14:50:12

+0

我们不在定时器中运行多线程代码,但我认为没有任何东西阻止您。我相信你在启动jvm时也需要指定-userThreads vm参数。 – 2012-04-04 14:53:44

1

是重构工作了Web应用程序,并成为一个独立的应用程序的可能性?

这样,你可以在批处理作业贴到一个单独的批处理服务器(以便批处理作业的额外负载不会影响你的Web应用程序),然后调用Web服务并更新数据库。然后可以使用诸如cron或Autosys之类的东西来启动这项工作。

我们使用Spring的批处理出于这样的目的。

数据库设计也将取决于什么批处理数据的用途。如果是出于报告目的,我建议使用数据库链接从操作数据库中将操作数据库与报告数据库分离,从操作数据库中获取所需数据到报告数据库,然后在报告数据库上运行复杂查询。这样负载就从操作数据库中移出。

+0

对于Spring-Batch,您是否有建议的策略或配置建议,无论它是否在自己的服务器上? – Cromat 2012-04-04 14:58:24

0

我认为这是值得也在考虑类似camel-integration框架。也可以看看所谓的企业集成模式。检查catalog - 它可能为您提供一些有用的词汇来思考当前的缩放/调度问题。

该框架本身与Spring很好地集成在一起。