はじめに
Googleのインフラで実行されるクラウドサービス Google App Engineが2009年4月7日にJavaに対応しました。Javaエンジニアにも利用できるようになった、Google App Engineを一緒に勉強して行きましょう!
今回は、Google App Engine上で設定した時間にプログラムを動作させることができる、「App Engine Cron Service」の使い方を勉強したいと思います。
対象読者
- ウェブサービス開発に興味のあるJavaエンジニア
- Google App Engine for Javaに興味がある方
必要な環境
- 「Google Plugin for Eclipse」がインストールされている、Eclipse 3.3(Europa)か3.4(Ganymede)
開発環境の構築手順については、第1回の解説を参照してください。
App Engine Cron Serviceとは?
ウェブサービスを作っていると、以下のように決まった時間にプログラムを走らせたいことがよくあります。
- 毎日24時に1日のアクセス記録を統計化して管理者にメールする
- 毎月1日の0時にテンポラリデータの削除をする
Windows系のシステムでは、「タスク・スケジューラ」、UNIX系のシステムでは「Cron」を利用しますが、Google App Engineにもこれに似た「App Engine Cron Service」と呼ばれる仕組みが用意されています。App Engine Cron Serviceでは、時間とURLを記述したxmlファイルをプログラムと一緒にデプロイすることによって、プログラムを制御します。
App Engine Cron Serviceを使ってみよう!
App Engine Cron Serviceの設定ファイル(cron.xml)は非常に簡単に書くことができます。早速、cron.xmlを見てみましょう。
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/cron/mail</url>  <!-- (1) -->
    <description>every 1 minutes</description>  <!-- (2) -->
    <schedule>every 1 minutes</schedule>  <!-- (3) -->
  </cron>
</cronentries>
- 自動的に実行したいURL
- この定義の名前(管理コンソールの「Cron Jobs」で表示される名前になります)
- アクセスさせたい日時
| ("every"|ordinal) (days) ["of" (monthspec)] (time) | 
書き方の例
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
| 項目 | 詳細な説明 | 
| every | 毎月/毎日/毎時を表現したい場合、「every」を指定します。 | 
| ordinal | 最初の週/第3週などを表現したい場合、英語で指定します。「1st」か「first」のいずれかのフォーマットで書きます。カンマ(,)で区切ることで複数指定できます。例:「第1と第3」と表現したい場合、カンマ(,)で区切り「1st,3rd」あるいは「first,third」と指定します。 | 
| days | 曜日を英語で指定します。「mon」か「monday」のいずれかのフォーマットで書きます。カンマ(,)で区切ることで複数指定できます。毎日の場合、「every mon,tue,wed,thu,fri,sat,sun」の代わりに「every day」と書くこともできます。 | 
| monthspec | 月を英語で指定します。「jan」か「january」のいずれかのフォーマットで書きます。カンマ(,)で区切ることで複数指定できます。指定がない場合、毎月になります。 | 
| time | 時間を「HH:MM」スタイル(24時方式)で指定します。 | 

 
              
               
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                              
                               
                              
                               
                              
                               
                              
                               
                              
                               
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
															
														 
															
														 
															
														.png) 
     
     
     
     
     
													 
													 
													 
													 
													 
										
									
 
                    