HOCON: проблема с несколькими ссылками.

У меня есть многомодульный проект под SBT.

проект A (библиотека) имеет reference.conf файл с AПараметры конфигурации. проект A зависит от akka-actor библиотека, которая поставляется со своим reference.conf файл. проект A переопределяет некоторые akkaпараметры в собственном reference.conf,

проект B зависит от A,

Когда я звоню ConfigFactory.load() в BЯ получаю неправильный порядок reference.confслияние. Сначала требуется Aконфиг, потом применяется akka-actorКонфиг над ним. В конце концов, я получаю начальный akka-actorКонфигурация

Как я могу это исправить? мне нужно получить akka-actorсначала загружается конфиг, потом мой AКонфигурация должна быть применена над ним.

1 ответ

Решение

Хорошо, потратив некоторое время копаться в источниках ConfigFactoryЯ наконец нашел решение.

Все reference.conf загружается через ClassLoader.getResources, Возвращается java.util.Enumeration[URL], Получатель чего-то URLs в этом перечислении является ответом на вопрос. Так что все, что вам нужно сделать: обеспечить порядок вашего reference.conf Ресурсы в этом списке правильно распределены.

Вот пример того, как это сделать. Во-первых, создайте свою собственную версию ClassLoader переопределив getResources метод:

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)
    }
}

Последний звонок load метод ConfigFactory с вашим CustomClassLoader пример.

Другие вопросы по тегам