【问题标题】:scala- error loading a properties file packed inside jarscala-加载打包在jar中的属性文件时出错
【发布时间】:2015-12-10 19:46:59
【问题描述】:

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

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

【问题讨论】:

    标签: scala configuration typesafe typesafe-config


    【解决方案1】:

    您的代码总体上看起来不错。

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

    【讨论】:

    • 感谢您的回答。只是一个问题:像这样,如果找不到 application.properties 将加载一个空配置,是否正确?如果是这样,我该如何测试是否是这种情况并记录下来?因为我试过 if(appProps.isEmpty) 但它不起作用
    • @Irene 我更新了我的答案。注意:不需要以'/'开头的资源文件,所以我从答案中删除了它。
    猜你喜欢
    • 2011-02-18
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2014-03-12
    • 2014-10-05
    • 2012-10-20
    • 2011-02-09
    相关资源
    最近更新 更多