夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Akka Actorでの設定ファイルの読み込み方を確認してみる

こんにちは。

前回でRoutingの基本をやって、次に移ろうとした所、
設定ファイルの読み込みが前提になっているような話になってきたので、
一度設定ファイルの読み込み方の確認をしてみます。

参考:
Configuration − Akka Documentation
Routing − Akka Documentation

1. 設定ファイルの読込確認

まず、基本の設定ファイルの読み込みから。
クラスパス直下にapplication.confを作成し、下記の内容で保存します。
■application.conf

akka {
  loglevel = "DEBUG"
}

その上で、実際にどのような設定が適用されているかを下記のコードで確認します。
内容としては、ActorSystemの設定を出力するのみ、となります。
■ConfiguredRoutingApp.scala

object ConfiguredRoutingApp extends App {
  override def main(args: Array[String]): Unit = {
    val system = ActorSystem.apply("MessageSendApp")
    println(system.settings);
  }
}

結果は下記のようになりました。
省略していますが、クラスパスやシステム情報、といったものまで含まれていました。
自分で作成したapplication.confと、あとはreference.confをマージしたものになっているようです。

尚、reference.conf上はloglevelは「INFO」となっているため、
application.confで記述すると上書きされるようです。
■実行結果

{
    # merge of application.conf: 1,reference.conf: 8
    "akka" : {
        # reference.conf: 62
        "actor" : {
            # reference.conf: 74
            # Timeout for ActorSystem.actorOf
            "creation-timeout" : "20s",
            # reference.conf: 411
(省略)
        "loggers" : [
            # reference.conf: 17
            "akka.event.Logging$DefaultLogger"
        ],
        # application.conf: 2
        "loglevel" : "DEBUG",
        # reference.conf: 469
(省略)
}

後はapplication.confを下記のように変更して再度同じコードを実行すると、
該当のログレベルのコメントにも反映されます。
■application.conf

akka {
  # カスタムログレベル
  loglevel = "DEBUG"
}

■実行結果

        # application.conf: 3
        # カスタムログレベル
        "loglevel" : "DEBUG",
        # reference.conf: 469

2. 設定ファイル空間を指定しての読込

次は、設定ファイル空間を指定しての読込です。
まず、設定ファイルを下記のように変更します。

akka {
  # カスタムログレベル
  loglevel = "DEBUG"
}

ConfiguredRoutingApp {
  # 個別設定
  akka.loglevel = "ERROR"
}

その上で、設定を読み込むコード側を下記のように修正します。
■ConfiguredRoutingApp.scala

object ConfiguredRoutingApp extends App {
  override def main(args: Array[String]): Unit = {
    val config = ConfigFactory.load()
    val system = ActorSystem.apply("ConfiguredRoutingApp", config.getConfig("ConfiguredRoutingApp"))
    println(system.settings);
  }
}

実行の結果、該当のログレベルは"ERROR"となります。

とりあえず、設定ファイルの記述方法と、その中のサブツリーを指定した読込が出来ることがわかりました。
次は、実際にActorに設定を適用できるか確認してみます。