34

@Scheduleアノテーションを次のように使用してみたいと思います。

public class MyTestServlet extends HttpServlet {
    private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class);

    @EJB CronService cronService;

    public void service(HttpServletRequest req, HttpServletResponse resp) throws .... {
    ....
    cronService.iLive(); 
}
---
    @Local // because the ejb is in a servlet (there is no other jvm)
public interface CronService {

    public void iLive();
    public void runsEveryMinute();
}
---
@Singleton
public class CronServiceBean implements CronService {
    private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class);

    @Schedule(minute="*")
    public void runsEveryMinute() {
        LOG.info(" runs EveryMinute ");
    }

    public void iLive() {
        LOG.info("iLive");

    }
 ---
 LOG
 ... 
 CronServiceBean:34  ] iLive

ログに基づくと、CronServiceは正常に動作していますが、スケジュールされたタスク「runsEveryMinute」は機能しません。

EJBスケジュールタスクを使用してどのように機能する必要がありますか?

4

2 に答える 2

77

アノテーションのJavadocによる@Scheduleと、デフォルト値は次のとおりです。

  • *時間、分、秒を除くすべてのフィールド。と
  • 0デフォルトでは、時、分、秒です。

時間を指定minute="*"してデフォルトのを残すことにより0、タイマーが深夜0時から1時間(つまり、00:00、00:01、00:02、...、00:59)、毎分実行されるように要求します。翌日まで。代わりに、以下を使用してください。

@Schedule(hour="*", minute="*")

数秒(秒など)ごとに実行するには、 cronのような構文10を使用できます。

@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false)

デフォルトでは、スケジューラーはイベントを永続化します。設定persistent = falseすると、必要に応じて、時間の経過とともに蓄積するのを防ぐことができます。

于 2012-07-14T14:11:39.803 に答える
25

スケジューラー構成については、以下の詳細を参照してください。

(1)1分ごとに実行する

@Schedule(hour = "*", minute = "*/1", persistent = false)

(2)5分ごとに実行する

@Schedule(hour = "*", minute = "*/5", persistent = false)

(3)30秒ごとに実行する

@Schedule(hour = "*", minute = "*", second = "*/30", persistent = false)

(4)毎日午前6時に実行する

@Schedule(hour = "6", minute = "0", second = "0", persistent = false)

(5)毎週金曜日の午後2時に実行する

@Schedule(dayOfWeek = "Fri", hour = "14", persistent = false)

(6)毎月1日の午前5時に実行する

@Schedule(dayOfMonth="1", hour = "5", persistent = false)

この情報が、要件に従ってスケジューラーを構成するのに役立つことを願っています。

于 2019-08-01T20:47:16.943 に答える