兩種方法:你可以在你的bean上設置一個布爾值,並且discover()
檢查布爾值是否應該運行。儘管如此,這仍然會導致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的定時器將取消爲好。