3

ジョブを繰り返し起動する必要があるアプリケーションがあります。しかし(はい、それがなければ簡単だったでしょうが...)ユーザーにアプリケーションでのバックアップ頻度を定義してもらいたいです。

最悪の場合、次のいずれかを選択する必要があります。

  • 毎週、
  • 毎日、
  • 12時間ごと、
  • 6時間ごと、
  • 毎時

最良の場合、crontab式を使用できる必要があります(たとえば、ドキュメントを参照してください)

これを行う方法?最後の実行時間と頻度をチェックし、必要に応じて別のジョブを起動するジョブを1分ごとに起動しますか?マスタージョブによって実行される一種のキューを作成しますか?

手がかり、アイデア、意見、最高の実践、経験は大歓迎です!

編集:Akkaスケジューラを使用してこの問題を解決しました。わかりました。これは設計上の答えではなく技術的な解決策ですが、それでもすべてがうまく機能します。

ユーザー定義の各繰り返しは、実際のジョブを実行するために新しいアクターに期間ごとにメッセージを送信するアクターです。

4

3 に答える 3

1

それについて google-groups で議論がありました。私が覚えている限りでは、6 時間ごとに開始するジョブを定義し、どのバックアップを実行する必要があるかを確認する必要があります。そのため、最後のバックアップ ジョブがいつ終了したかを覚えておいて、自分で制御する必要があります。Quartz がそのような要件を処理できるかどうかはわかりません。

私はソース コード (常に良いソース ;-)) を見て、メソッドを見つけました。1000 人のユーザーがいる場合、1000 のジョブがあるため、これが巧妙な設計であるかどうかはわかりません。Play がこれほど多くのジョブを処理できるように構築されているかどうかはわかりません。

[更新] cron 式については、調べておく必要がありますJobPlugin.scheduleForCRON()

于 2011-08-10T18:30:25.997 に答える
0

これを解決するにはいくつかの方法があります。

本当に膨大な量のジョブがない場合は、必要な柔軟性を使用してそれらをテーブルに永続化します。次に、それらすべてを 1 時間ごと (またはサポートする最小間隔) にチェックし、適格なものを実行します。単純。

または、とにかく cron 構文を使用したい場合は、実行中のアプリにコールバックするラッパーを使用してユーザー crontab にジョブを書き込む (エクスポートする) か、可能であればスタンドアロン プロセスでジョブを開始します。

于 2011-08-22T11:42:40.230 に答える