6

什么容易阅读和理解,Scala 代码根据以下 Java 代码加载 Java 属性:

    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 框架使用的typesafe config 。

特点(引自维基):

  • 用纯 Java 实现,没有依赖项
  • 广泛的测试覆盖
  • 支持三种格式的文件:Java 属性、JSON 和人性化的 JSON 超集
  • 合并所有格式的多个文件
  • 可以从文件、URL 或类路径加载
  • 对“嵌套”的良好支持(将配置的任何子树视为整个配置)
  • 用户可以使用 Java 系统属性覆盖配置,java -Dmyapp.foo.bar=10 支持配置应用程序及其框架和库,所有这些都来自单个文件,例如 application.conf
  • 解析持续时间和大小设置,“512k”或“10 秒”
  • 转换类型,所以如果你要求一个布尔值并且值是字符串“yes”,或者你要求一个浮点数并且值是一个整数,它会弄清楚。
  • 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 回答