6

読みやすく理解しやすいもの、次のJavaコードに従ってJavaプロパティをロードするScalaコード:

    try {
        Properties prop = new Properties();
        prop.load(new FileInputStream("config.properties"));
        this.host = prop.getProperty("mongo.host");
        this.port = new Integer(prop.getProperty("mongo.port"));
        this.dbName = prop.getProperty("mongo.db");
        this.docsCollName  = prop.getProperty("mongo.coll.docs");
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }

ありがとう!

4

2 に答える 2

19

私は確かに、Scalaの背後にある会社によって書かれ、少なくともAkkaフレームワークによって使用されるtypesafeconfigをお勧めします。

機能(wikiから引用):

  • 依存関係のないプレーンJavaで実装
  • 広範なテストカバレッジ
  • Javaプロパティ、JSON、および人間に優しいJSONスーパーセットの3つの形式のファイルをサポートします
  • すべての形式で複数のファイルをマージします
  • ファイル、URL、またはクラスパスからロードできます
  • 「ネスト」の優れたサポート(構成のサブツリーを構成全体と同じように扱います)
  • ユーザーは、Javaシステムプロパティを使用して構成をオーバーライドできます。java-Dmyapp.foo.bar= 10は、application.confなどの単一のファイルから、フレームワークとライブラリを使用してアプリの構成をサポートします。
  • 期間とサイズの設定、「512k」または「10秒」を解析します
  • 型を変換するため、ブール値を要求し、値が文字列「yes」である場合、またはfloatを要求し、値がintである場合、それが計算されます。
  • JSONスーパーセットの機能:コメントには置換( "foo":$ {bar}、 "foo":Hello $ {who})プロパティが含まれます-表記法(ab = c)のように、ノイズが少なく、構文がより寛大な置換環境変数

例:

Config conf = ConfigFactory.load();
int bar1 = conf.getInt("foo.bar");
Config foo = conf.getConfig("foo");
int bar2 = foo.getInt("bar");
于 2013-03-27T12:57:10.810 に答える
13

ほとんど同じです(構成ライブラリを使用していない場合):

val (host, port, dbName, docsCollName) = 
  try {
    val prop = new Properties()
    prop.load(new FileInputStream("config.properties"))

    (
      prop.getProperty("mongo.host"),
      new Integer(prop.getProperty("mongo.port")),
      prop.getProperty("mongo.db"),
      prop.getProperty("mongo.coll.docs")
    ) 
    } catch { case e: Exception => 
      e.printStackTrace()
      sys.exit(1)
    }
于 2013-03-27T12:08:09.170 に答える