Google App Engineのcronを使ってサーブレットを定期的に実行する

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’をチェックすれば管理者権限で実行できる。
    gae_admin_console
カテゴリー: Tips タグ: , パーマリンク

Google App Engineのcronを使ってサーブレットを定期的に実行する への1件のフィードバック

  1. ピンバック: 予定表に従ってfoursquareに自動チェックインする | Try Lifelog

コメントは停止中です。