簡體   English   中英

如何在Tomcat的Java EJB中啟動@Schedule方法

[英]How to start @Schedule method in Java EJB in Tomcat

我有一個在Tomcat8中運行的Java Servlet(在Eclipse中)。 調用Servlet時,我想執行一個命令並調用一個使用Scheduler的方法。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Scheduler s = new Scheduler();
        s.doStuff();

 package xy;
 import javax.ejb.Schedule;
 import javax.ejb.Singleton;

  @Singleton
  public class Scheduler {

    private int counter = 0;

    @Schedule(second = "*/5", minute = "*", hour = "*", info="Every 5 seconds")
    public void  doStuff(){
        counter++;
        System.out.println("counter: " +counter);           
    }
}

按照我的邏輯,每隔5秒我應該看到一個計數器println越來越高。 但是什么也沒發生。

Tomcat不是完整的Java EE容器。 它僅實現Java Servlet和JavaServer Pages技術,因此您將無法使用EJB( @Singleton )或Timer Service( @Schedule )。 考慮使用Java EE服務器或ScheduledExecutorService

也可以看看

Tomcat不是EJB容器

在tomcat中執行計划執行的最簡單方法-使用java.util.concurrent.ScheduledExecutorService

@WebListener
public class MyAppContextListener implements ServletContextListener {
    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        //init sheduler
        scheduler = Executors.newSingleThreadScheduledExecutor();
        //!!!Shedule task
        scheduler.scheduleAtFixedRate(...);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        scheduler.shutdownNow();
    }
}

放棄任務使用:

scheduler.scheduleAtFixedRate(command, initialDelay, period, unit);

command -類的實例,它實現java.lang.Runnable

initialDelay以時間單位首次運行之前的延遲

period -任務執行之間的時間間隔

unit java.util.concurrent.TimeUnit (例如TimeUnit.MINUTES

嘗試使用jboss open src免費版本或http://tomee.apache.org/ Tommy,它的下面有tomcat。 就像其他人所說的,tomcat不是完整的應用程序容器。

暫無
暫無

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

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