gpt4 book ai didi

java - 在 Grails 中保留对后台线程的引用?

转载 作者:行者123 更新时间:2023-12-02 08:02:42 24 4
gpt4 key购买 nike

我的 Grails 1.3.7 应用程序需要处理大 XML 文件,因此我有一个 Controller ,我将大文件上传到其中,然后我将此文件在服务器上的路径提供给执行处理的后台线程,以便我可以立即从 Controller 操作返回。

目前,我正在使用 Grails Executor 插件,它运行良好。我有一个上传域对象,该对象会随着处理的进行而更新(当前状态、已处理元素的数量等)。但现在我还有两个要求:

  • 当应用程序崩溃或服务器关闭时,我想拦截并更新我的上传域以表明该过程已中断
  • 我希望用户能够在单击链接时自行中断处理,并可能从 Controller 操作中恢复处理

有没有一种方法可以让我保留对后台任务的引用并使用 java.util.concurrent 框架(由 Executor 插件使用)拦截任何中断?

如果我无法使用 util.concurrent 做到这一点,是否可以使用其他插件/框架?例如,我看过 Quartz,但我不知道如何做到这一点。

最佳答案

我不想在没有完全测试的情况下回答它,但是 grails-executor plugin docs声明 callAsync 方法返回 java.util.concurrent.Future object .

这个对象可以用来做两件事:

  1. 确定流程是否已完成或已取消。
  2. 取消正在运行的进程(甚至在必要时中断)。

理论上,您应该能够将这个 Future 保存在用户 session 中的某个位置。然后您可以稍后检索它并使用它来检查状态和/或根据需要取消该过程。

类似于:

session.backgroundProcess = callAsync{...}

// later
def bgProc = session.backgroundProcess
if(bgProc && !(bgProc.done || bgProc.cancelled)) {
// process is still running
}

这只是想法,未经测试。我也不知道这是否存在导致内存泄漏的问题。您需要确保在该过程完成后分离 Future

关于java - 在 Grails 中保留对后台线程的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com