scala-加载jar中包含的属性文件时出错

时间:2015-09-14 18:03:01

标签: scala configuration typesafe typesafe-config

这是一个新手问题,我读了很多,但我有点困惑。

我从Jar内部传递一个属性文件,读取配置,一切都很好。

我想添加一个try catch。我试过这个但是它不起作用,因为如果属性文件不存在,加载不会产生异常。因此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)
      }
    }
    

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)
  }