【问题标题】:How to start @Schedule method in Java EJB in Tomcat如何在Tomcat的Java EJB中启动@Schedule方法
【发布时间】:2015-08-09 20:43:44
【问题描述】:

我有一个在 Tomcat8 中运行的 Java Servlet(在 Eclipse 中)。当调用 Servlet 时,我想执行一个命令并调用一个使用调度程序的方法。

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 不是 EJB 容器

标签: java jakarta-ee scheduled-tasks scheduler


【解决方案1】:

Tomcat 不是一个完整的 Java EE 容器。它仅实现 Java Servlet 和 JavaServer Pages 技术,因此您将无法使用 EJB (@Singleton) 或 Timer Service (@Schedule)。考虑使用 Java EE 服务器或ScheduledExecutorService

另见

【讨论】:

    【解决方案2】:

    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

    【讨论】:

      【解决方案3】:

      试试 jboss open src 免费版或http://tomee.apache.org/ Tommy,它下面有 tomcat。就像其他人所说的那样,tomcat 不是一个完整的应用容器。

      【讨论】:

      猜你喜欢
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多