概要HTTPリクエストとは関係なく処理を行ないたいときに、非同期ジョブ機能がある。(もちろんHTTPリクエストと同期して実行することもできる)準備play.jobs.jobクラスを継承したクラスを用意する。doJob()メソッドを実装し、行ないたい処理を書く。doJobWithResult()メソッドを実装する。いずれかのメソッドを実行する。now()は、即時実行。in(int)は、遅延実行。引数Stringin(String)も、遅延実行。@Everyと同じ書式。afterRequest()は、HTTPリクエスト中に意味を持つ。現在実行中のアクションが終了してから実行する。JPAでsave()、コミット後にジョブを実行したいときに有効。用いてジョブの終了まで、リクエストをサスペンド状態にすることができる。サスペンド状態にすると、コネクションが解放されるので、次のリクエストを処理することができる。応答に長時間かかるリクエストで合っても、コネクションを占有しないで済むとされる。アプリケーション開始時に実行ジョブクラスに対し、@OnApplicationStartアノテーションを付与すると、アプリケーション開始時にジョブが実行される。アノテーションのasyncプロパティはデフォルトはfalseになっており、ジョブ処理が終了するまでアプリケーションは開始しない。async=trueに設定すると、バックグラウンドで動作する。細かいことafterApplicationStart()イベント内より実行される。起動時にインスタンスが一度だけ生成され、スケジュール管理に残り続けるので勝手に消滅しない。DEVモードでは最初のリクエストを受けたときに実行。PRODモードではサービス起動時に実行。アプリケーション終了時に実行ジョブクラスに対し、@OnApplicationStopアノテーションを付与すると、アプリケーション終了時に実行される。play.Play.stop()が実行されたときなので、必ず実行されるとは限らない。onApplicationStop()イベント内より実行される。インスタンスは終了時に生成される。一定間隔で実行ジョブクラスに対し、@Everyアノテーションを付与すると、引数に指定した間隔でジョブが実行される。設定した値を参照する。conf/application.confcron.hoge=3hインスタンスは起動時に一度だけ生成され、アプリケーション実行中はずっと残りつづける。定時に実行ジョブクラスに対し、@Onアノテーションを付与すると、引数に指定した時間に実行される。引数はcron書式に準拠する。インスタンスは起動時に一度だけ生成され、アプリケーション実行中はずっと残りつづける。おまけ定期ジョブの実行は、java.util.concurrent.ScheduledThreadPoolExecutorクラスで実現している。ここの情報をみると、あまり時刻に正確さを期待してはいけないのかもしれない。