无法读取配置文件使用scala typesafe API

时间:2017-04-02 14:33:14

标签: scala apache-spark

我有一个名为Omega

的spark / scala项目

我在Omega / conf / omega.config

中有一个conf文件

我使用来自typesafe的API来从conf / omega.config加载配置文件。 它工作正常,我能够读取每个键的相应值

今天,我第一次在我的omega.config文件中添加了一些键值对,并尝试从我的scala代码中检索它们。它抛出

 Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'job_name'

在我的omega.config文件中为密钥job_name添加新值后,此问题开始发生。 此外,我无法读取新添加的-key值,我仍然可以使用config读取所有旧值。 getString方法

我正在使用maven构建我的spark / scala应用程序。

Omega.config

input_path="/user/cloudera/data
user_name="surender"
job_name="SAMPLE"

我无法访问最近添加的密钥" job_name"单独    包com.pack1

import com.pack2.ApplicationUtil
object OmegaMain {

  val config_loc = "conf/omega.config"

  def main(args: Array[String]): Unit = {

   val config               = ApplicationUtil.loadConfig(config_loc)
   val jobName              = ApplicationUtil.getFromConfig(config,"job_name")
}
}


package com.pack2
import com.typesafe.config.{Config, ConfigFactory}


object ApplicationUtil {

 def loadConfig(filePath:String):Config={
  val config = ConfigFactory.parseFile(new File(filePath))

  config
 }

  def getFromConfig(config:Config,jobName:String):String={
    config.getString(jobName)
  }

}

有人可以帮我解决问题吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

def loadConfig(filename: String, syntax: ConfigSyntax): Config = {
val in: InputStream = getClass.getResourceAsStream(filename)
if (in == null) return null
val file: File = File.createTempFile(String.valueOf(in.hashCode()), ".conf")
file.deleteOnExit()

val out: FileOutputStream = new FileOutputStream(file)
val buffer: Array[Byte] = new Array(1024)
var bytesRead: Int = in.read(buffer)
while (bytesRead != -1) { out.write(buffer, 0, bytesRead); bytesRead = in.read(buffer) }
out.close()

val conf: Config = ConfigFactory.parseFile(file, ConfigParseOptions.defaults().setSyntax(syntax).setAllowMissing(false).setOriginDescription("Merged with " + filename))
conf

}

filename是类路径中 的一些文件路径 。如果您想更新此方法以考虑某些外部文件,请使用val file: File = new File("absolute Path of he file")

更新第4次更新

答案 1 :(得分:0)

我猜你用Maven构建后文件不在类路径上。

由于您使用Maven构建jar,因此需要omega.config位于类路径中。这意味着您必须默认将其放入src/main/resources或明确告诉Maven将conf添加到默认资源类路径中。