【发布时间】:2019-09-13 06:27:27
【问题描述】:
我正在 scala 中寻找一些适合 akka 的实用程序,它们可以将 HOCON 映射到 Scala 类/对象。 (类似于 Spring 中的 @Configuration 将 .yml 或 .properties 文件映射到配置 bean/Java 类。)
我对@987654322@ 的尝试:
spark.conf 资源中的配置文件
spark{
master {
host = 1.2.3.4
port = 7077
}
}
映射到以下 scala 类:
trait Configuration {
val nameSpace: String
}
case class SparkConfig(master: SparkMasterConfig) extends Configuration {
override val nameSpace: String = "spark"
}
case class SparkMasterConfig(host: String,
port: Int)
PureConfig 在没有泛型的情况下也能正常工作:
import pureconfig.generic.auto._
import com.typesafe.config.ConfigFactory
val conf = ConfigFactory.parseResources("spark.conf")
val sparkConfig = pureconfig.loadConfig[SparkConfig]("spark")
val config = sparkConfig match {
case Left(f) => fail(f.toString)
case Right(c) => c
}
但是,以下通用工具甚至无法使用 not enough arguments for method error 编译
object PureConfigLoader{
def load[T <: Configuration](clazz: Class[T]): T = {
val nameSpace = clazz.getField("nameSpace").get().asInstanceOf[String]
import pureconfig.generic.auto._
val configResult = pureconfig.loadConfig[T](nameSpace) // this doesn't compile
configResult match {
case Right(x) => x.asInstanceOf[T]
case Left(x) => throw new IllegalArgumentException(s"Fail to parse ${clazz.getSimpleName} from namespace $nameSpace")
}
}
}
val config = PureConfigLoader.load(classOf[SparkConfig])
我的问题是:
- 我可以用这个通用的 PureConfig 实用程序做什么?
-
import pureconfig.generic.auto._总是被 IntelliJ 标记为未使用的导入,格式化我的代码时它会被删除,如何解决这个问题? - 是否有任何其他配置工具/库以类似的方式正常工作?我也尝试过circe-config,但仍然遇到类似的问题。 Simple Scala Config 使用 Scala 的 Dynamic 不利于重构,例如重命名配置属性字段。
谢谢
【问题讨论】:
标签: scala pureconfig