这是一个新手问题,我读了很多,但我有点困惑。
我从Jar内部传递一个属性文件,读取配置,一切都很好。
我想添加一个try catch。我试过这个但是它不起作用,因为如果属性文件不存在,加载不会产生异常。因此3个问题:
如果是这样,有关如何的任何建议?
var appProps : Config = ConfigFactory.load()
try {
appProps = ConfigFactory.load("application.properties")
} catch {
case e: Exception => {
log.error("application.properties file not found")
sc.stop()
System.exit(1)
}
}
答案 0 :(得分:3)
您的代码通常看起来不错。
ConfigFactory.load("resource.config")
将处理缺少的资源,如空资源。结果你得到一个空的Config
。因此,try-catch-block并没有多大意义。
您通常会指定一个这样的回退配置:
val appProps = ConfigFactory.load(
"application.properties"
).withFallBack(
ConfigFactory.load()
)
修改强>
句子
结果你得到一个空的
Config
有些不完整。 ConfigFactory.load(resourceBaseName: String)
应用defaultReference()和defaultOverrides()。因此,生成的Config
对象可能包含一些通用环境数据,并且不为空。
据我所知,检查资源是否存在并发出错误消息的最佳选择是自己查找资源:
val configFile = "application.properties"
val config = Option(getClass.getClassLoader.getResource(configFile)).fold {
println(s"Config not found!")
ConfigFactory.load()
} { resource =>
ConfigFactory.load(configFile)
}