如何正确取消一个nexus任务(作为可执行脚本)?

问题描述 投票:0回答:1

我为一个nexus资源库写了一个清理脚本,通过调用第三方系统的休息接口来验证是否使用了某个组件。长话短说:由于组件和网络流量的数量,这个脚本的运行时间很大。所以它需要是可取消的,有了这个要求,我的问题也就多了起来。

这个脚本是用groovy写的,使用nexus的任务界面手动执行。使用 "执行脚本 "骨架创建了一个新的任务。当试图停止这个任务时,它只在日志中写道

admin org.sonatype.nexus.quartz.internal.task.QuartzTaskJob - Task not cancelable: 'TEST' [script] 。

不幸的是,nexus的例子脚本都很短小方便,没有人使用取消功能本身。

因此,在查找了建议的QuartzTaskJob的源头,我看到这是一个Nexus任务的封装器,它应该被QuartzSchedulerSPI自动使用。

因此,我已经实现了它的一个虚拟版本,以已实现的任务(如RestoreMetadataTask)为例进行测试。首先通过在其中加入sleep(),第二次尝试是你在下面的代码引用中看到的for循环。两次尝试都有同样悲惨的结局。

import org.sonatype.nexus.scheduling.Cancelable;
import org.sonatype.nexus.scheduling.TaskSupport;

public class CancelableTask
extends TaskSupport
implements Cancelable

{
    @Override
    public String getMessage(){
        return null
    }

    @Override
    protected Void execute() throws  Exception{
        log.info("Start TimeTestCancel")
        for(int i = 0; i < 1000000000000; i++){
            for(int j = 0; j < 1000000000000; j++) {
                if (isCanceled()) {
                    log.info(i)
                    break;
                }
            }
        }
        log.info("Finished TimeTestCancel")
    }
}

睡眠和循环。当在Nexus 3.7.1-02上测试时,它只是将状态改为 "阻塞",显示 "停止 "按钮,但当按下它时又显示 "任务不可取消"。无法删除或改变它们.只是循环。当在Nexus 3.21.1 -01上测试时,它的执行速度非常快,我无法尝试取消它。

所以我基本上问自己,我缺少什么?有没有一种方法可以让job作为groovy脚本来取消?还是我必须实现一个nexus插件来归档我的目标?

java groovy nexus nexus3
1个回答
0
投票

不是所有的任务都可以取消。 你可以在issues.sonatype.com中提交一个问题来要求这一点,然而,这个脚本接口存在安全问题,并且在NXRM3的新版本中不再启用。 我猜测它最终会被REST API取代。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.