【问题标题】:Java EE Singleton Scheduled Task Executed twiceJava EE Singleton 计划任务执行两次
【发布时间】:2013-10-21 08:32:09
【问题描述】:

我想在预定时间(23:59 CET 和 08:00 CET)执行两个任务。我创建了一个维护这些方法的 EJB 单例 bean:

@Singleton
public class OfferManager {

    @Schedule(hour = "23", minute = "59", timezone = "CET")
    @AccessTimeout(value = 0) // concurrent access is not permitted
    public void fetchNewOffers() {
        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Fetching new offers started");

        // ...

        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Fetching new offers finished");
    }

    @Schedule(hour="8", minute = "0", timezone = "CET")
    public void sendMailsWithReports() {
        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Generating reports started");

        // ...

        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Generating reports finished");
    }
}

问题是这两个任务都执行了两次。服务器为 WildFly Beta1,配置为 UTC 时间。

以下是一些可能有用的服务器日志:

2013-10-20 11:15:17,684 INFO  [org.jboss.as.server] (XNIO-1 task-7) JBAS018559: Deployed "crawler-0.3.war" (runtime-name : "crawler-0.3.war")
2013-10-20 21:59:00,070 INFO  [com.indeed.control.OfferManager] (EJB default - 1) Fetching new offers started
....
2013-10-20 22:03:48,608 INFO  [com.indeed.control.OfferManager] (EJB default - 1) Fetching new offers finished
2013-10-20 23:59:00,009 INFO  [com.indeed.control.OfferManager] (EJB default - 2) Fetching new offers started
....
2013-10-20 23:59:22,279 INFO  [com.indeed.control.OfferManager] (EJB default - 2) Fetching new offers finished

这种行为的原因可能是什么?

【问题讨论】:

  • 检查是否有其他@Schedule 可以在21:59:00 运行。您显示的代码此时应该运行。
  • 这些是唯一用@Schedule注释的方法
  • 第二种方法也执行了两次。预定时间前2小时一次,以后正确

标签: java jakarta-ee design-patterns jboss singleton


【解决方案1】:

我通过使用服务器时间 (UTC) 指定预定时间解决了这个问题。 所以

@Schedule(hour = "23", minute = "59", timezone = "CET")

被替换为:

@Schedule(hour = "21", minute = "59")

我不知道这种行为的原因,可能是 Wildfly 的早期发布问题。

【讨论】:

    【解决方案2】:

    我在使用 TomEE plume 7.0.4 时遇到了同样的问题。就我而言,解决方案是将@Singleton 更改为@Stateless

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 2013-02-05
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2016-07-11
      • 2013-07-23
      相关资源
      最近更新 更多