Google App Engine (GAE)にはcronサービスが用意されており、指定時刻・定期的な間隔でタスク(cronジョブ)を処理してくれる。cronジョブにより特定のURLを呼び出せるので、あらかじめ用意したサーブレットを実行することができる。(公式の説明はこちらを参照。)
- タスクをスケジューリングする(cron.xml)
タスクのスケジュールは’cron.xml’という名前のファイルに記述し、WEB-INFフォルダ直下に配置する。<?xml version="1.0" encoding="UTF-8"?> <cronentries> <cron> <url>/recache</url> <description>Repopulate the cache every 2 minutes</description> <schedule>every 2 minutes</schedule> </cron> <cron> <url>/weeklyreport</url> <description>Mail out a weekly report</description> <schedule>every monday 08:30</schedule> <timezone>America/New_York</timezone> </cron> </cronentries>
- ‘url’:サーブレットのURL。
- ‘description’:タスクの説明(省略可能で、動作に影響しない)。
- ‘schedule’:タスクスケジュール。以下のサンプルに沿って記述する。
- ‘timezone’:タイムゾーン。日本の場合は Asia/Tokyo を指定。
every 5 minutes every 12 hours 2nd,third mon,wed,thu of march 17:00 every monday 09:00 1st monday of sep,oct,nov 17:00 every day 00:00
- サーブレットを保護する(web.xml)
cronで実行するサーブレットをユーザからは操作できないようにするには、専用のURL(パターン)を用意し、そのURLを管理専用にすることで実現できる。この設定はweb.xmlに記述する。<security-constraint> <web-resource-collection> <url-pattern>/cron/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
上記の例では、/cron以下のURLは管理者専用になり、ブラウザから実行できなくなる。(あわせてサーブレットのマッピングも以下のように /cron/hoge にしておくのを忘れないこと。)
<servlet-mapping> <servlet-name>CheckinScheduledServlet</servlet-name> <url-pattern>/cron/checkinscheduled</url-pattern> </servlet-mapping>
- cronサーブレットをローカル環境で実行する
ローカル環境にはタスクのスケジューリング機能がないので、テストしたいときは手動で(ブラウザから)実行する。その際、以下の認証画面が表示されるが、メールアドレスはそのままで、’sign as administrator’をチェックすれば管理者権限で実行できる。
ピンバック: 予定表に従ってfoursquareに自動チェックインする | Try Lifelog