我正在建立一个库来访问多个数据目录。目录可以引用数据库和配置文件 (HOCON) 中定义的关联表。这是一个配置文件示例(book.conf):
author {
database = "db_books"
table = "author"
}
book {
database = "db_books"
table = "book"
}
我定义了一个代表这个配置文件的案例类(BookCatalogConfig.scala):
trait CatalogConfig
case class TableConfig(database: String, table: String)
case class BookCatalogConfig(author: TableConfig, book: TableConfig) extends CatalogConfig
然后我像这样定义我的 BookCatalog:
case class BookCatalog(environment: String) {
/* ... */
val config: BookCatalogConfig = CatalogConfigLoader[BookCatalogConfig](environment).load()
/* ... */
}
还有我的 CatalogConfigLoader 实用程序:
case class CatalogConfigLoader[A <: CatalogConfig](environment: String) {
def load(): A = {
import pureconfig.generic.auto._
// Note: ConfigHelper.getConfig(environment) return a Typesafe Config object with the content of book.conf)
ConfigSource.fromConfig(ConfigHelper.getConfig(environment)).load[A] match {
case Right(catalogConfig: A) => catalogConfig
case Left(error: ConfigReaderFailures) => throw new Exception(error.toString())
}
}
}
但这不会编译并出现错误:找不到 pureconfig.ConfigReader[A] 的隐式实例。如果您尝试读取或写入案例类或密封特征,请考虑通过添加使用 PureConfig 的自动派生import pureconfig.generic.auto._
我已经阅读了很多关于该主题的内容,但没有任何解决方案有效
注意:我将 Pureconfig 0.14 用于 scala 2.11(我无法升级,因为 0.14 是 scala 2.11 的最后一个......而且我也无法升级 scala 版本......)。