Scala:加载Java属性

Ant*_*nin 5 java scala properties

什么是易于阅读和理解,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);
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

fra*_*cca 18

我一定会推荐由Scala背后的公司编写并至少由Akka框架使用的typesafe配置.

功能(引自维基):

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


om-*_*nom 12

大致相同(如果你没有使用任何配置库):

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)
    }
Run Code Online (Sandbox Code Playgroud)

  • @AntonAshanin它是[解构分配](http://stackoverflow.com/a/2776847/298389),它接受try块的结果(在成功的情况下),然后将返回值分配给本地值集.这样您就可以只使用val而不使用vars. (3认同)
  • @AntonAshanin好吧,如果出现问题你正在调用System.exit(),那你为什么要关心实例化呢? (2认同)