如何在Java / Spring下管理繁重的任务?

时间:2014-01-20 14:26:48

标签: java spring

我有一个仪表板,用户可以在其中修改客户数据。一些修改需要对所有这些客户进行大量处理。我不想阻止我的用户等待任务完成,所以如何在后台管理?

我看到了Spring Batch,但我不确定这是个好答案。还有别的吗?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

请参阅(google)@Async和/或Spring AMQP / JMS

答案 1 :(得分:0)

这不是Spring特有的功能,但如果您在商业Java应用程序服务器(例如websphere,weblogic)下工作,您将有一些工作管理器的实现。

http://docs.oracle.com/javaee/1.4/api/javax/resource/spi/work/WorkManager.html

这些是容器管理的线程池,用于将工作发送到后台。您可以在管理控制台中找到用于配置和微调它们的工具。

答案 2 :(得分:0)

你应该有一个separte进程或应用程序来处理这种繁重的任务。 您的主应用程序必须通过任何方法(如JMS,JGroups,ConcurrentLinkedQueue或任何您想要的方法)与此重任务处理器进行通信。 您可以一次处理(解除)每个任务或使用线程池。 任务完成后,您必须实现一种方法来通知主应用程序任务已完成(JMS,订阅等)。

答案 3 :(得分:0)

你已经有了一个接受的答案,但我想提出另一个选项FYI。

  • 如果要在同一个JVM中运行,@ Async和任务执行程序将起作用。
  • 如果你有一份需要进度跟踪,简历等的大工作,并且用户不需要互动,那么Spring Batch可以正常工作。
  • 如果你想要远程触发大型工作,或者作为消息驱动架构的一部分,Spring Batch Integration是一项新的工作,可以更好地结合Spring Integration和Spring Batch。