scala-加载打包在 jar 中的属性文件时出错
scala- error loading a properties file packed inside jar
这是一个新手问题,我看了很多,但我有点困惑。
我从 Jar 中传递了一个属性文件,读取了配置,一切正常。
我想添加一个尝试 catch.I 尝试了这个但是它不起作用,因为如果属性文件不存在,加载不会产生异常。因此3个问题:
- 这样加载文件正确吗?
- 由于配置在 jar 中,因此放置 try/catch 有意义吗?
如果是这样,有什么建议吗?
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)
}
}
您的代码总体上看起来没问题。
ConfigFactory.load("resource.config")
将像处理空资源一样处理缺失的资源。结果你得到一个空的 Config
。所以,try-catch-block 没有意义。
您通常会像这样指定后备配置:
val appProps = ConfigFactory.load(
"application.properties"
).withFallBack(
ConfigFactory.load()
)
编辑:
句子
As a result you get an empty 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)
}
这是一个新手问题,我看了很多,但我有点困惑。
我从 Jar 中传递了一个属性文件,读取了配置,一切正常。
我想添加一个尝试 catch.I 尝试了这个但是它不起作用,因为如果属性文件不存在,加载不会产生异常。因此3个问题:
- 这样加载文件正确吗?
- 由于配置在 jar 中,因此放置 try/catch 有意义吗?
如果是这样,有什么建议吗?
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) } }
您的代码总体上看起来没问题。
ConfigFactory.load("resource.config")
将像处理空资源一样处理缺失的资源。结果你得到一个空的 Config
。所以,try-catch-block 没有意义。
您通常会像这样指定后备配置:
val appProps = ConfigFactory.load(
"application.properties"
).withFallBack(
ConfigFactory.load()
)
编辑:
句子
As a result you get an empty
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)
}