java - 将类型安全配置类型转换为 java.util.Properties

标签 java scala typesafe

标题不言自明,我有一个 Config 对象(来自 https://github.com/typesafehub/config),我想将它传递给一个只支持 java.util.Properties 作为参数的构造函数。 有没有一种简单的方法可以将 Config 转换为 Properties 对象?

最佳答案

这是一种将类型安全的 Config 对象转换为 Properties 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"
  }
}

您可以像这样创建相应的Properties 对象:

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 来获取扁平化的属性列表,以及展开条目值,给出一个对象,其类型取决于配置值。

关于java - 将类型安全配置类型转换为 java.util.Properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337782/

相关文章:

java - 引用匿名类构造函数中的最终对象泄漏?

java - 将 applet 安装到 java 卡的 APDU 命令顺序是什么?

Java Google Drive Android API,上传后获取文件ID

scala - 为递归方法生成Scala AST

python - Spark MapPartitionRDD 无法打印值

scala - 在伴生对象的 apply 方法中使用 New 关键字

hadoop - 如何将位于 HDFS 上的类型安全配置文件添加到 spark-submit(集群模式)?

java - 从另一个类获取变量值

scala - 如果类型安全配置中不存在系统变量,如何设置默认列表值?

scala - 隐式 val GetResult 中的发散式隐式扩展