如何在WebSphere集群上获取一次定时器任务,只执行一次?我知道这在其他应用服务器上是可行的,但无法弄清楚如何在WebSphere中执行此操作。
答案 0 :(得分:5)
您可以使用WebSphere的Scheduler服务来执行您想要的操作。 如果在集群作用域中定义调度程序服务,则每个集群成员将运行调度程序守护程序,但将共享任务DB,这意味着只有其中一个将执行您添加的任务。 他们每30秒(可配置)轮询数据库,第一次打开以查看任务将执行它。
请记住,EJB 3.1提供的新功能可能会帮助您按照自己的意愿行事,但这只是WAS 8。
答案 1 :(得分:3)
我不确定您的问题是群集还是其他问题。但是如果你想在一次执行后停止TimerListener,你只需使用输入的定时器变量并取消它。
例如:
public static class MyTimer implements TimerListener {
public void timerExpired(Timer timer) {
timer.cancel();
}
}
如果您遇到集群环境问题,每个实例运行一次任务,而不是发布这个简单答案的道歉。
答案 2 :(得分:2)
您可能应该阅读this solution来评估它是否适合您的情况。
答案 3 :(得分:0)
可能你可以使用兵马俑/ ehcache锁定? http://www.ehcache.org/documentation/2.4/terracotta/explicit-locking