0

[我们使用的是 JBoss 6,但我相信这个问题适用于任何 JaveEE 应用服务器]

我们有一个应用程序服务器,它(除其他外)应该执行一些非常长时间运行的任务(可能需要几个小时)。

该任务是通过调用某个 EJB 函数触发的,但到目前为止,整个操作都在此函数调用中运行,因此在 EJB 事务中运行。此类事务超时相当快,仅延长事务超时似乎不是正确的解决方案。

整个任务可以很容易地分成加载/工作/存储部分,因此似乎没有严格要求在整个时间内进行事务。

所以问题是:这样做的“正确”方法是什么?

4

3 回答 3

1

我绝对要求你看看石英。这是以特定时间间隔安排任务的惊人工具。我们在我们的一个项目中使用了 Quartz,它很棒。我们的场景是以 Excel 文件的形式从 post 中获取输入,然后异步处理那些可能需要很长时间的巨大 excel,我们所做的是获取输入并安排一个作业在 1 秒后运行。Spring 还支持使用 quarts 进行作业调度,而 Jboss 预装了 quarts。

于 2013-06-24T08:24:36.837 回答
1

[不完全确定是否可以从我的问题中看到这一点,但我找到了我正在寻找的答案]

一些工作可以由WorkManager安排。

请参阅http://danielveselka.blogspot.de/2012/03/schedule-jobs-with-workmanager.html获取有关它的文章的一些指针。

于 2013-08-22T12:54:38.133 回答
0

这样做的一般正确方法是将这些任务作为工作,然后异步处理它们。Spring为此提供了一个内置框架。但一般来说,您可以将长任务放入队列中,在 Web 应用程序之外单独处理,然后通过电子邮件通知用户,或者为用户提供可以检查状态的链接。

于 2013-06-24T08:11:13.180 回答