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
,而不是硬编码。