尝试使用 ConfigFactory.parseString 时未找到密钥 'conf' 的配置设置
No configuration setting found for key 'conf' while trying to use ConfigFactory.parseString
我正在尝试读取存储在我的 s3 中的 application.conf bucket.I 使用 Bufferedsource 从 s3 读取但是当我尝试使用 ConfigFactory.parseString(source.mkString).getConfig("conf")
它没有找到'conf' 即 there.Below 是我的源代码:
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$Missing:未找到键的配置设置'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"]}))
我正在尝试读取存储在我的 s3 中的 application.conf bucket.I 使用 Bufferedsource 从 s3 读取但是当我尝试使用 ConfigFactory.parseString(source.mkString).getConfig("conf")
它没有找到'conf' 即 there.Below 是我的源代码:
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$Missing:未找到键的配置设置'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"]}))