以前から自分で使っていたモジュールをgithubに公開することにしました。
play1-projects/launcher at main · komina77/play1-projects (github.com)
mavenへ登録するまでは手が回っていません。launcher/dist配下のzipをコピーしてきてローカルレポジトリに置いて、依存性解決してください。設定の書き方は /samples/say-hello/conf/dependencies.yml を参考に。
何ができるか
Webアプリケーションフレームワークとして作られているplayframework1を、Webサーバを起動しないで任意のクラスを実行することができます。
$ play launcher:run yourAppDir --class=info.komina.MyJob
play1のJPA拡張やpojo拡張などの便利な機能を享受したJavaアプリケーションを作ることができるわけです。
リソースが相互に干渉しないように設定すれば、Webアプリケーションとして稼働しつつ、コマンドラインからジョブ実行。JenkinsやJP1のようなツールにジョブの実行を任せるような運用も可能です。
作るきっかけ
playframework1のジョブ機能を利用していて運用に不満を持ったのがきっかけです。ジョブ機能は正常に動いているときは確かに便利なのですが、実行状況を把握したり、任意のジョブをリカバリのためにリランさせたりといったことは、あらかじめプログラミングされていないとできません。
そこでジョブ類をWebアプリケーションから分離できたらな、と考えコマンドラインからの実行を思い立ちました。
Groovyも使えます
最近はGroovyも良く使うので、Groovyスクリプトも利用できるようにしています。もともとplay1ではテンプレート機能のためにGroovyの実行環境が同梱されているので、それを呼び出す部分から流用しています。
そのため、テンプレートと同様にコンパイル後キャッシュされます。
ジョブの動作テスト用に使う
モジュールのドキュメントにも書きましたが、もともとあるジョブ(play.jobs.Job
を継承)にmainメソッドを追加する方法がおすすめです。mainメソッドにはジョブを起動するだけのコードを書き、メインの処理はdoJob()
内に記述します。
コマンドラインからジョブだけを直接実行できるので、試行錯誤が効率的に行えます。