簡體   English   中英

在Java EE中停止計划的EJB任務

[英]Stop a scheduled EJB task in Java EE

我下面有預定的bean,它每兩分鍾運行一次發現方法。

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

上述方法的問題在於它會永遠運行。 發現完成后,有什么方法可以阻止踢踢的方法嗎? 我可以有條件地運行/停止嗎?

兩種方法:您可以在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
     } 
}

或者,您可以取消正在處理作業的計時器 這是一個更永久的解決方案。 至少不容易,您將無法重新啟動此計划的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上的計時器將被永久取消。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM