簡體   English   中英

使用EJB計時器的Java EE計划程序任務

[英]Java EE Scheduler Task using EJB Timers

我有一項要求,要求在當天的給定時間運行3-6個計划任務。 我是EJB計時器的新手,但已經讀過EJB計時器是處理Java EE容器中的計划任務的最佳方法。

設計問題:

假設我需要10個預定任務。 如果可能的話,我不希望創建10個EJB計時器。 相反,我希望創建一個關閉的EJB計時器,然后重新使用它來創建所需的預定作業,為每個實例傳遞預定的運行時間(作為aruguements),這可能嗎? 請有人請幫助解決這個問題嗎?

NB我在考慮使用非持久性EJB計時器......

另一個選項(除了alreay說)是為每個定時方法使用帶有@Schedule注釋的單例:

@Singleton
@Startup
public class TimedTaskManager {

  @Schedule(second = "0", minute = "*/5", hour = "*")
  public void runTask1() {
    //
  }

  @Schedule(second = "15", minute = "*/5", hour = "6,7,8")
  public void runTask2() {
    //
  }

  //
  //

  @Schedule(second = "0", minute = "*", hour = "1,2,6")
  public void runTaskN() {
    //
  }
}

你可以在一個無狀態/消息驅動的bean業務方法中定義一個定時器(你仍然需要調用它,但是,不可能創建一個自己啟動的定時器)。 然后,在@Timeout方法中,您可以根據您認為合適的任何邏輯重新創建計時器,即

@Stateless
public SomeEJB ... {

     @Resource
     private TimerService timerService;

     public void businessMethod() {
         timerService.createTimer(...);
     }

     @Timeout
     public void timeout(Timer timer) {
         // do some timer-related logic, recreate the timer,
         // perhaps with new duration
         timerService.createTimer(...);
     }
}

此示例與EJB 3.0兼容。

AFAIK無法在EJB中創建一個“可重用”計時器,因為您必須告訴每個計時器應該調用哪個方法。

看看這個:

第三方庫Quartz Scheduler應該能夠以編程方式創建Timer對象。 也許值得一看這個!

希望這有幫助,玩得開心!

暫無
暫無

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

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