Scala 处理ConfigFactory加载错误的正确方法

Scala 处理ConfigFactory加载错误的正确方法,scala,configuration,typesafe-config,Scala,Configuration,Typesafe Config,我让我的应用程序选择要加载的配置文件: -Dconfig.file=src/main/resources/dev.conf 我创建了一个设置特性,这样我就可以轻松地扩展设置,并在我的应用程序中访问这些变量。在实现中,我以以下方式使用ConfigFactory: val config = ConfigFactory.load() 这是一个问题。如果指定“dev.conf”的参数不存在,那么这将查找“application.conf”以及其他参数,并且不会设置“dev.conf”中的变量。当应用

我让我的应用程序选择要加载的配置文件:

-Dconfig.file=src/main/resources/dev.conf
我创建了一个设置特性,这样我就可以轻松地扩展设置,并在我的应用程序中访问这些变量。在实现中,我以以下方式使用ConfigFactory:

val config = ConfigFactory.load()
这是一个问题。如果指定“dev.conf”的参数不存在,那么这将查找“application.conf”以及其他参数,并且不会设置“dev.conf”中的变量。当应用程序试图获取不在conf中的内容时,它会爆炸


一旦我知道没有设置配置文件,我怎么能在这里立即爆炸?“conf”值不是null/None,我无法直接访问可能传入的“dev.conf”参数。

而不是使用
ConfigFactory.load()
, 你可以用

ConfigFactory.parseFile(new File(pathToYourConfig))
这将确保使用-Dconfig选项中的文件,并且该文件是可解析的

要确保配置文件包含所有必需字段,必须进行健全性检查。我喜欢实例化一个类,它将把我需要的所有配置字段分配给一个val,比如

class Settings(conf: Config) {
      val projectName = conf.getString("projectName")
      val database = conf.getString("database")
}

现在在应用程序启动时,如果指定给
-Dconfig.file

的配置文件中不存在该字段,则该类将引发异常,因为第一部分无法达到使用-Dconfig的目的,因为现在我必须更改代码(更改pathToYourConfig的值)每次我想从dev.conf切换到staging.conf再切换到prod.conf时,我都同意这种合理性检查——不幸的是,对于第一部分,这可能是唯一的方法,您应该从cli参数获取
pathToYourConfig
,而不是硬编码。