Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaee中的长操作调度_Java_Jakarta Ee - Fatal编程技术网

javaee中的长操作调度

javaee中的长操作调度,java,jakarta-ee,Java,Jakarta Ee,每五分钟我都会检查一下后台进程是否需要做些什么。它工作得很好,直到达到运行时间更长的情况 @Resource private ManagedExecutorService executorService; @Schedule(hour="*", minute="*/5", second="0", persistent=false) public void sometimesALengthyOperation() { ... executorService.submit(leng

每五分钟我都会检查一下后台进程是否需要做些什么。它工作得很好,直到达到运行时间更长的情况

@Resource
private ManagedExecutorService executorService;

@Schedule(hour="*", minute="*/5", second="0", persistent=false)
public void sometimesALengthyOperation() {
    ...
    executorService.submit(lengthyTask);
    ...
}
我已经用ManagedExecutorService处理了这个问题,但我不确定当这个问题需要五分钟以上的时间并启动第二个并行后台任务时,如何处理这个问题

我可以实现某种信号量,但我希望这是ManagedExecutorService的一部分。
什么是确保我只得到一个实例的“正确方法”?

这是一个非常有效的问题,而且,在任何JEE规范中都没有描述的“标准”解决方案。在过去,我们使用DB锁实现它。这意味着一旦计时器启动,它就会尝试获取数据库中的行级锁;如果成功,它将继续执行业务逻辑,否则它将放弃,假设另一个执行正在进行,或者集群中的另一个节点已经执行了该执行。应用服务器似乎也这么做了()。答案“没有官方答案”对我来说是一个完美的答案。现在我知道我需要做什么了。谢谢