Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala-加载打包在jar中的属性文件时出错_Scala_Configuration_Typesafe_Typesafe Config - Fatal编程技术网

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

scala-加载打包在jar中的属性文件时出错,scala,configuration,typesafe,typesafe-config,Scala,Configuration,Typesafe,Typesafe Config,这是一个新手问题,我读了很多书,但我有点困惑 我从一个Jar中传递一个属性文件,读取配置,一切正常 我想添加一个try-catch。我尝试了这个方法,但没有效果,因为如果属性文件不存在,加载不会产生异常。因此,有三个问题: 这样加载文件正确吗 既然配置在jar中,那么设置try/catch有意义吗 若有,有何建议 var appProps : Config = ConfigFactory.load() try { appProps = ConfigFactory.load("applic

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

我从一个Jar中传递一个属性文件,读取配置,一切正常

我想添加一个try-catch。我尝试了这个方法,但没有效果,因为如果属性文件不存在,加载不会产生异常。因此,有三个问题:

  • 这样加载文件正确吗
  • 既然配置在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”)
将像处理空资源一样处理丢失的资源。因此,您会得到一个空的
配置
。因此,try-catch块并没有真正意义

您通常会指定如下的回退配置:

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),但是没有work@Irene我更新了我的答案。注意:不需要以“/”开头资源文件,所以我从答案中删除了它。