0

スケジュールされた時間 (23:59 CET と 08:00 CET) に 2 つのタスクを実行したいと考えています。これらのメソッドを維持する 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");
    }
}

問題は、両方のタスクが 2 回実行されることです。サーバーは、UTC 時間で構成された WildFly Beta1 です。

役に立つかもしれないいくつかのサーバーログを次に示します。

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

そのような行動の原因は何ですか?

4

2 に答える 2

1

サーバー時間(UTC)でスケジュールされた時間を指定することで問題を解決しました。そう

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

に置き換えられました:

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

このような動作の原因はわかりません。Wildfly の早期リリースが問題なのかもしれません。

于 2013-10-22T08:22:15.607 に答える