HOCON:多个 reference.conf 分辨率问题

HOCON: multiple reference.conf resolution issue

我在 SBT 下有一个多模块项目。

项目 A(库)有 reference.conf 文件和 A 的配置参数。项目 A 依赖于 akka-actor 库,它附带自己的 reference.conf 文件。项目 A 在自己的 reference.conf.

中重新定义了一些 akka 的参数

项目 B 取决于 A

当我在 B 中调用 ConfigFactory.load() 时,reference.conf 的合并顺序错误。它首先采用 A 的配置,然后在其上应用 akka-actor 的配置。最终,我得到了 akka-actor 的初始配置。

我该如何解决?我需要先加载 akka-actor 的配置,然后再应用我的 A 的配置。

好的,看来我在 ConfigFactory 的来源中找到了答案。

正在通过 ClassLoader.getResources 加载所有 reference.conf。它returnsjava.util.Enumeration[URL]URLs 在这个枚举中的顺序就是问题的答案。所以您需要做的就是:确保您的 reference.conf 资源在此枚举中的顺序正确排列。

这是一个如何做到这一点的例子。首先,通过覆盖 getResources 方法创建您自己的 ClassLoader 版本:

import scala.collection.JavaConverters._

class CustomClassLoader(loader: ClassLoader) extends ClassLoader(loader){
    override def getResources(name: String): util.Enumeration[URL] = {
        val resources = super.getResources(name).asScala.toList
        // arrange resources as you wish here
        java.util.Collections.enumeration(resources.asJava)
    }
}

最后,使用您的 CustomClassLoader 实例调用 ConfigFactoryload 方法。