将 Typesafe Config 类型转换为 java.util.Properties
标题本身就说话,我有一个Config对象(来自 https://github.com/typesafehub/config),我想把它传递给一个只支持java.util.Properties作为参数的构造函数。有没有一种简单的方法可以将Config转换为属性对象?
标题本身就说话,我有一个Config对象(来自 https://github.com/typesafehub/config),我想把它传递给一个只支持java.util.Properties作为参数的构造函数。有没有一种简单的方法可以将Config转换为属性对象?
下面是将类型安全配置对象转换为属性 java 对象的方法。我只是在创建Kafka属性的简单案例中对其进行了测试。
在 application.conf 中给定此配置
kafka-topics {
my-topic {
zookeeper.connect = "localhost:2181",
group.id = "testgroup",
zookeeper.session.timeout.ms = "500",
zookeeper.sync.time.ms = "250",
auto.commit.interval.ms = "1000"
}
}
您可以创建相应的属性对象,如下所示:
import com.typesafe.config.{Config, ConfigFactory}
import java.util.Properties
import kafka.consumer.ConsumerConfig
object Application extends App {
def propsFromConfig(config: Config): Properties = {
import scala.collection.JavaConversions._
val props = new Properties()
val map: Map[String, Object] = config.entrySet().map({ entry =>
entry.getKey -> entry.getValue.unwrapped()
})(collection.breakOut)
props.putAll(map)
props
}
val config = ConfigFactory.load()
val consumerConfig = {
val topicConfig = config.getConfig("kafka-topics.my-topic")
val props = propsFromConfig(topicConfig)
new ConsumerConfig(props)
}
// ...
}
函数 propsFromConfig 是你最感兴趣的,关键点是使用 entrySet 来获取属性的扁平化列表,以及 entry 值的解包,它给出了一个对象,其类型取决于配置值。
你可以试试我的scala包装器 https://github.com/andr83/scalaconfig。使用它将配置对象转换为java属性很简单:
val properties = config.as[Properties]