Java EE Singleton计划任务执行两次 [英] Java EE Singleton Scheduled Task Executed twice

查看:167
本文介绍了Java EE Singleton计划任务执行两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to execute two tasks on scheduled time (23:59 CET and 08:00 CET). I have created an EJB singleton bean that maintains those methods:

@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时间配置。

The problem is that both tasks are executed twice. The server is WildFly Beta1, configured in UTC time.

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

Here are some server logs, that might be useful:

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

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

What might be the cause of such behaviour?

推荐答案

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

I solved the problem with specifying scheduled time with server time (UTC). So

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

被替换为:

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

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

I don't know the cause of such beahaviour, maybe the early release of Wildfly is the issue.

这篇关于Java EE Singleton计划任务执行两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆