1.0.0をリリースした記念にS2Chronosの使い方を簡単に紹介していく記事を書いていきたいと思います.
セットアップ
セットアップ手順は
http://s2chronos.sandbox.seasar.org/ja/install.html
をご覧ください.
サンプルのダウンロードは
http://s2chronos.sandbox.seasar.org/ja/download.html
からお願いします.
コンソール版のサンプルはs2chronos-example-1.0.0.zip
Teeda版のサンプルはs2chronos-teeda-example-1.0.0.zip
SAStruts版のサンプルはs2chronos-sastruts-example-1.0.0.zip
です.
コンソールアプリではスケジューラの起動命令を記述する必要があります.三行で書けますw
public static void main(String[] args) { SingletonS2ContainerFactory.init(); SingletonS2Container.getComponent(Scheduler.class).process(); SingletonS2ContainerFactory.destroy(); }
アプリケーションサーバにS2Chronosを内包しウェブアプリとバッチ処理を同居させることができます.ただし,S2ContainerServletより後に起動するようにload-on-startupを調整してください.
<servlet> <servlet-name>chronosServlet</servlet-name> <servlet-class>org.seasar.chronos.extension.servlet.S2ChronosServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet>
すでに持っているDIできる資産を好きなだけバッチ処理にDIしてください.
バッチ処理はタスククラスを書くことから
ルートパッケージ名+taskに,クラスサフィックスがTaskで終わるクラス名で以下のようなタスククラスを定義しましょう.すると,アプリケーションを起動したときにS2Chronosがタスククラスを見つけて,スケジューラに自動的にスケジュール登録します.このサンプルは,1分ごとにdoExecuteメソッドを呼び出し,ログを出力します.
@Task @CronTrigger(expression = "0 */1 * * * ?") public class SampleTask { private static Logger log = Logger.getLogger(SampleTask .class); // タスク処理 public void doExecute() { log.info(this.getClass().getSimpleName() + ":doExecute"); } }
ちなみに,@Taskがついていない,トリガーが指定されていないタスクはスケジューリングされません.(Taskアノテーションがついていても,@Task(autoSchedule=false)の場合はスケジューリングされません)
実行時間はトリガーで指定する
トリガーはタスクを起動する時間を指定する役割を持っています.標準でいくつかのトリガーが用意されていますが,やはり最も利用するのがクローントリガーです.上記の例ではCROND形式の起動条件を指定して1分ごとにタスクが起動するようにしています.
単純なバッチ処理であれば覚えることはこれだけ.次回はスケジューラのスレッドの話をさせてもらいます.