Scalaで並行処理#3 – Akkaのconfigファイル

2012.01.31

設定ファイルを使用する

Akkaは特に指定されなかった場合、タイムアウト時間や有効化しているモジュール、ロギングの設定など、
akka-reference.confファイルにしたがって値を設定しています。
必要に応じてこれらの値は変更する可能性があるので、そういった場合には独自に設定ファイルを用意して読ませる必要があります。
今回はAkkaで設定ファイルを使用する方法について解説します。

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.2
  • Java : 1.6.0_26
  • Scala : 2.9.1 final
  • SBT : 0.11.2
  • Eclipse : 3.7

実行環境のセットアップ

#2の記事で作成したAkkaサンプルを使用します。前回記事を参考にプロジェクトを作成しておきましょう。

設定ファイルを用意して実行

適当な場所に 「akka.conf」という名前で下記内容のファイルを用意します。

akka {
version = "1.3"
}

1つだけ値を設定します。この設定値は、Akkaのバージョンをチェックして、1.3でなければエラーを発生させます。

akka.confファイルを読ませる方法はいくつかあります。

  • クラスパスのルートにakka.confを置く
  • AKKA_HOME環境変数を設定して、AKKA_HOME/conf/にakka.confを置く
  • 起動時に-Dakka.configシステムプロパティにakka.confのパスを設定する

今回は-Dakka.configシステムプロパティを設定する方法でやってみました。 sbt起動時に-Dakka.configをつけて起動します。

% cd /path/your/AkkaSample
% sbt -Dakka.config=/path/your/conf/akka.conf
[info] Set current project to Akka Sample (in build file://path/your/myAkkaSample/)

Akkaのバージョンは1.2を使用しているので、実行してみると下記のようなエラーがでるはずです。

[info] Running Main 
Couldn't parse config, fatal error.
Config source: Loading config from 
-Dakka.config=/path/your/conf/akka.conf
akka.config.ConfigurationException: Akka JAR version [1.2] 
is different than the provided config version [1.3]

akka.confのversionを1.2にして再度実行してみましょう。今度は問題なく動くはずです。

ファイルのインクルード

例えば、デバッグ用のロギングやタイムアウト時間など、開発時のみ適用したい設定があるとします。
それだけのために設定ファイルをすべて用意するのは面倒なので、そういった場合に便利なインクルードの機能があります。
akka-prod.confにリリース用設定を記述しておき、akka-dev.confではakka-prod.confをインクルードします。
そして開発時だけ使用したい設定を記述します。

include "akka-prod.conf"

akka {
  event-handler-level = "DEBUG"

  debug {
    autoreceive = "true"
    lifecycle = "true" 
  }
}

こうすれば、基本設定はakka-prod.confに従い、開発時に必要な設定のみakka-dev.confの値で設定されます。

まとめ

今回はAkkaの設定ファイルを使用する方法について記述しました。
ここにakka.confの設定内容も書いてありますので、参照してください。

参考サイトなど