gpt4 book ai didi

java - 在 Java EE 中停止计划的 EJB 任务

转载 作者:行者123 更新时间:2023-12-01 21:43:27 24 4
gpt4 key购买 nike

我有下面的预定 bean,它每两分钟运行一次发现方法。

@Stateless(name="MySchedulerBean)
public class MySchedulerBean
@Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT"
public void discover(){
//run discovery every 2 minute
}
}

上述方法的问题是它会永远运行。一旦我的发现完成,有什么方法可以阻止该方法的执行吗?我可以有条件地运行/停止吗?

最佳答案

两种方法:您可以在 bean 上设置一个 boolean 值,并让 discover() 检查该 boolean 值是否应该运行。但这仍然会导致 discover() 每两分钟调用一次,但什么也不做。但这将允许您添加 resumeDiscovery() 方法以供稍后使用。

@Stateless(name="MySchedulerBean)
public class MySchedulerBean
private boolean cancelTimer = false;

public void stopDiscovery() {
this.cancelTimer = true;
}

@Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT"
public void discover() {
if (cancelTimer) {
return;
}
//run discovery
}
}

或者,您可以取消 Timer那就是处理工作。这是一个更持久的解决方案;您将无法重新启动此计划的 EJB...至少,不容易。看起来像这样:

@Stateless(name="MySchedulerBean)
public class MySchedulerBean
private boolean cancelTimer = false;

public void stopDiscovery() {
this.cancelTimer = true;
}

@Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT"
public void discover(Timer timer) {
if (cancelTimer) {
timer.cancel();
return;
}
//run discovery
}
}

现在,如果您决定停止发现,下次发现尝试运行时,该 Bean 上的计时器将被永久取消。

关于java - 在 Java EE 中停止计划的 EJB 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36199315/

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