Как динамически загрузить конфигурацию hocon в класс кейса во время выполнения

Я работаю над библиотекой, которая будет принимать hocon конфигурации пользователя и класс случая, предоставляемый пользователем (в пути к классам пользовательского приложения), мне нужно читать конфигурацию hocon к классу случая динамически во время выполнения. Динамически я имею в виду здесь, что я не знал бы класс case во время компиляции, я бы знал только класс case во время выполнения по вводу пользователя.

Как я могу прочитать hocon в классе case, используя его имя класса или ClassTag? Я пробовал использовать pureconfig или kxbmap / configs и другие оболочки scala для tsconfig, но им нужна информация о классе case во время компиляции.

Есть ли вообще или какие-либо инструменты для динамического чтения классов hocon to case во время выполнения?


person Praneeth Ramesh    schedule 12.11.2020    source источник
comment
Запускает ли действие пользователя создание файла hocon? А потом банку с этим конфигом запускаете?   -  person Tomer Shetah    schedule 12.11.2020
comment
Вместо изменения конфигурации вашего приложения во время выполнения должно быть лучшее решение. Не могли бы вы добавить больше деталей?   -  person Emiliano Martinez    schedule 12.11.2020
comment
Я могу думать только об отражении во время выполнения, которое рекурсивно пытается инициализировать вещи, и мне нужно иметь некоторые предоставленные конфигурации для обработки примитивных типов данных. Но это действительно показывает худшее в Java: отражение во время выполнения, ошибки во время выполнения, аннотации или текстовые конфигурации для настройки инициализации и т. Д.   -  person Mateusz Kubuszok    schedule 12.11.2020
comment
@ EmiCareOfCell44 Пользователь предоставляет статические файлы hocon, а также предоставляет класс case, в который они читаются, в соответствии с соглашением об именах. Я пишу задачу gradle, которая будет читать файлы hocon и анализировать их для объектов класса case. Эти объекты класса case в дальнейшем используются плагином для создания искрового фрейма данных и запуска на нем некоторых SQL-запросов. Это не appconf, вы можете думать о нем как о статических файлах conf (я бы хотел использовать hocon из-за его составной природы).   -  person Praneeth Ramesh    schedule 12.11.2020
comment
Каждый раз, когда вы получаете новый hoocon- (case class), выполняет задачу gradle ?, но это не время выполнения ... что такое динамическая часть ?. Вы можете читать hoocon динамически, но концепция case-класса имеет смысл только во время компиляции. Кроме того, если вам нужно использовать spark sql, класс case, возможно, в этом нет необходимости (если вы можете извлечь из него схему df).   -  person Emiliano Martinez    schedule 13.11.2020
comment
Динамическая часть заключается в том, что я не знаю класс case или hocon, который я анализирую во время компиляции. Пользователь предоставит имя hocon, например test.conf, в качестве входных данных при вызове сборки gradle, и в пути к классам сборки пользователя будет класс case, например Test .scala, мне нужно разобрать test.conf в Test.scala, и я не думаю, что смогу получить неявные считыватели, необходимые во время выполнения, поскольку там неявные считыватели управляются макросами, и я не знаю класс case для синтаксического анализа во время компиляции.   -  person Praneeth Ramesh    schedule 16.11.2020
comment
В настоящее время я делаю это с помощью искры. Я визуализирую hocon в json и читаю json с искрой, используя spark.read.schema (caseClassSchema) .json (json). Преобразование CaseClass в sparkSchema (structType) и преобразование его в набор данных [CaseClass], который работает нормально, но для этого мне нужно создать экземпляр sparkSession .. Я хочу сделать это без sparkSession, используя исходные парсеры классов hocon для case, такие как pureconfig, если это возможно .   -  person Praneeth Ramesh    schedule 16.11.2020
comment
Как предположил @Mateusz Kubuszok, я попытался рекурсивно инициализировать класс case, с помощью которого мне нужно обрабатывать слишком много преобразований примитивных типов, и я все еще скептически отношусь к тому, что это может вызвать некоторые исключения во время выполнения ..   -  person Praneeth Ramesh    schedule 16.11.2020
comment
@PraneethRamesh Вот несколько вопросов, в которых классы генерируются, имплициты решаются во время выполнения с помощью Toolbox: stackoverflow.com/questions/64045433/ stackoverflow.com/questions/64308467/ stackoverflow .com / questions / 64102795 / stackoverflow.com/questions/64798525/   -  person Dmytro Mitin    schedule 30.11.2020
comment
@PraneethRamesh Может быть, подход с отражением или набором инструментов также может сработать в вашем случае использования. Возможно, я могу помочь написать соответствующий код (для класса, известного во время выполнения), если сначала вы покажете свой код с помощью hocon, pureconfig и т. Д. Для случая, когда класс является обычным классом времени компиляции.   -  person Dmytro Mitin    schedule 30.11.2020
comment
@PraneethRamesh И даже если имплициты основаны на макросах, это в принципе не должно препятствовать их разрешению во время выполнения, если я правильно понимаю. См. Вопрос 64903163 по ссылкам выше.   -  person Dmytro Mitin    schedule 30.11.2020
comment
@PraneethRamesh. Тебе удалось сделать то, что ты хотел?   -  person Dmytro Mitin    schedule 13.12.2020