Java 找不到键';形态';尝试使用ConfigFactory.parseString时

Java 找不到键';形态';尝试使用ConfigFactory.parseString时,java,scala,apache-spark,typesafe-config,application.conf,Java,Scala,Apache Spark,Typesafe Config,Application.conf,我正在尝试读取存储在s3存储桶中的application.conf。我使用Bufferedsource从s3中读取,但当我尝试使用ConfigFactory.parseString(source.mkString).getConfig(“conf”)时,没有找到其中的“conf”。下面是我的源代码: import com.amazonaws.auth.DefaultAWSCredentialsProviderChain import com.amazonaws.services.s3.model

我正在尝试读取存储在s3存储桶中的application.conf。我使用Bufferedsource从s3中读取,但当我尝试使用
ConfigFactory.parseString(source.mkString).getConfig(“conf”)
时,没有找到其中的“conf”。下面是我的源代码:

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain
import com.amazonaws.services.s3.model.S3Object
import com.amazonaws.services.s3.{AmazonS3Client, AmazonS3ClientBuilder, AmazonS3URI}
import scala.collection.JavaConversions._

import scala.io.{BufferedSource, Source}


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


    import com.amazonaws.auth.BasicAWSCredentials
    val credentials = new BasicAWSCredentials("key", "secertkey")
  //  val credentialsProvider = new DefaultAWSCredentialsProviderChain()
    val s3Client = new AmazonS3Client(credentials)
    val uri: AmazonS3URI = new AmazonS3URI("s3://test-buck/conf/application.conf")
    val s3Object: S3Object = s3Client.getObject(uri.getBucket, uri.getKey)

    val source: BufferedSource = Source.fromInputStream(s3Object.getObjectContent)
    try {
      println(source.mkString)
      import com.typesafe.config.{Config, ConfigFactory}
      val rawConfig: Config = ConfigFactory.parseString(source.mkString)
      val rootConfig = rawConfig.getConfig("conf")

      println(rootConfig)
//      println(rotConfig)
    } finally {
      source.close()
    }

  }
}

我的应用程序配置如下所示

  conf {
    
       source_data_list = ["OL", "SB","1CP"]
//some other value
    
 OL {
    filename = "receipts_delta_GBR_14_10_2017.csv"
    sftp_conf {
      hostname = "endpoint"
      port = "22"
      username = "ubuntu"
      pem = "pemfile"
      filetype = "csv"
      delimiter = "|"
      directory = "/home/ubuntu/data"
    }

  }
    }
不确定我在这里做错了什么。如果我打开资源并尝试通过
ConfigFactory.load(“application.conf”).getConfig(“conf”)
加载,则使用相同的应用程序配置。它可以按预期工作。 这方面的任何线索都会有所帮助

我得到了一个例外

线程“main”中的异常线程“main”com.typesafe.config.ConfigException$中的异常缺失:找不到键“conf”的配置设置 在com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)上 位于com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:218) 位于com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:224) 位于com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:33) 位于com.dsm.utils.Test$.main(Test.scala:26)
在com.dsm.utils.Test.main(Test.scala)

上,您实际上成功地读取了配置

您遇到的问题是因为
BufferedSource
。缓冲源可以读取一次。我猜,你阅读它是为了调试,然后源代码就结束了。第二次阅读时,为了填充
rawConfig
,会得到一个空字符串。我通过将配置字符串提取到变量中,然后使用它来解决这个问题

val config = source.mkString
println(s"config is: $config")
val rawConfig: Config = ConfigFactory.parseString(config)
val rootConfig = rawConfig.getConfig("conf")
println(s"rootConfig is: $rootConfig")
输出为:

rootConfig is: Config(SimpleConfigObject({"OL":{"filename":"receipts_delta_GBR_14_10_2017.csv","sftp_conf":{"delimiter":"|","directory":"/home/ubuntu/data","filetype":"csv","hostname":"endpoint","pem":"pemfile","port":"22","username":"ubuntu"}},"source_data_list":["OL","SB","1CP"]}))

实际上,您成功地读取了配置

您遇到的问题是因为
BufferedSource
。缓冲源可以读取一次。我猜,你阅读它是为了调试,然后源代码就结束了。第二次阅读时,为了填充
rawConfig
,会得到一个空字符串。我通过将配置字符串提取到变量中,然后使用它来解决这个问题

val config = source.mkString
println(s"config is: $config")
val rawConfig: Config = ConfigFactory.parseString(config)
val rootConfig = rawConfig.getConfig("conf")
println(s"rootConfig is: $rootConfig")
输出为:

rootConfig is: Config(SimpleConfigObject({"OL":{"filename":"receipts_delta_GBR_14_10_2017.csv","sftp_conf":{"delimiter":"|","directory":"/home/ubuntu/data","filetype":"csv","hostname":"endpoint","pem":"pemfile","port":"22","username":"ubuntu"}},"source_data_list":["OL","SB","1CP"]}))

你能提供错误信息吗?这会很有帮助。@Yann我更新了异常信息。您还可以提供错误消息吗?这会很有帮助。@Yann我更新了得到的异常