powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Размышления на тему конфигов
25 сообщений из 67, страница 1 из 3
Размышления на тему конфигов
    #39424596
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Всё что ниже- это расуждения, никак не руководство "бежать и делать". Хотя бы потому, что не исправлена критичная бага для выполнения этого.

Возникла такая мысль- все эти properties (даже если они yaml) - это костыль.
Почему? Потому что теряется вся прелесть статически типизированного языка.
Я могу ошибиться в имени и не заметить этого- IDEA часто не видит использования проперти, если она в другом модули, поэтому она не помошник, а eclipse/netbeans вроде этого вообще не умеют.
Могу ошибиться в типе (да хоть ввести 1.3е10 с русской "е").

А что вместо? А например kotlin-script.
В коде описываем классы с параметрами (каждый модуль- свои), потом приложение описывает мега-класс со ссылками на все возможные параметры, пишем неболшую обёртку и далее в .kts-файле пишем примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
define {
  module1 {
    param1 = 1.3
    param2 = "Value"
    param3 = listOf("val1", "val2")
  }
}


В т.ч. можно и лямбды писать (чего в конфигах нет вообще).

Далее выполняется конфиг и на выходе получаем готовый объект с параметрами, которые можно передавать тому же guice/springio

Интересно послушать умные мысли, как за, так и против.

--<br /> Алексей.<br />
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39425035
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему не груви? В целом же - полностью поддерживаю инициативу. Сам в поисках подобного решения. Основная проблема в использовании языка это относительно строгий синтаксис, который легко могут нарушить не достаточно технически подкованные пользователи.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39425076
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПочему не груви?

А что толку от груви? Нет проверки типов. Closure надо конвертировать. Плюс один - вместо любого значения можно вставить Closure. Но что-то я боюсь такой гибкости. У нас уже есть конфиг в груви для специальной части кода- но я жду kotlin 1.1.2 чтобы заменить на котлин-скрипт.

После появления kotlin и kotlin-script я не вижу смысла в groovy вообще.
И не только я- kotlin-script задействовали вместо груви в spring-boot и gradle.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39425510
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Была похожая тема уже. Делал как-то так: #19518406
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39425658
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
а мне нравится подобная идея, единственное нужно по тестить, на сколько eclipse понимает kotlin и mixed проект из Java/Kotlin, в IJIDEA думаю все идеально должно быть.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426062
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приблизительно такой же подход используется в http://bootique.io
И без всяких котлинов, грувей и прочей лабудени (хотя интеграция с Kotlin есть из коробки)
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426073
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426105
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TПриблизительно такой же подход используется в http://bootique.io
И без всяких котлинов, грувей и прочей лабудени (хотя интеграция с Kotlin есть из коробки)

Ничего общего. Можно в конфиге что угодно написать- ниаой обратной связи.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426106
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanAlexey Tomin,

@ConfigurationProperties / @PropertySource

Как раз про это я и говорю- костыли.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426175
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

В bootique 4 уровня конфигурации:
- CLI (переменные среды)
- JVM параметры
- файл конфигурации (YAML, JSON, возможность подключения кастомных форматов)
- программный код в Guice-модуле -- это то, о чем пишите вы в исходном посте, если я правильно понял

Подобный подход реализован в аналогичных проектах Spring и Dropwizard. По принципу "чем больше уровней конфигурации, тем лучше". С типизацией проблем никаких нет -- большие куски конфигурационной логики размещаются в DI в виде кода, а отдельные параметры сеттятся/инжектируются в параметры конструкторов/методов или поля классов, и соответвствие типов проверяется рантаймом (YAML и JSON поддерживают типы, а конвертацией строковых CLI и JVM параметров занимается фреймворк).
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426226
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TAlexey Tomin,

В bootique 4 уровня конфигурации:
- CLI (переменные среды)
- JVM параметры
- файл конфигурации (YAML, JSON, возможность подключения кастомных форматов)
- программный код в Guice-модуле -- это то, о чем пишите вы в исходном посте, если я правильно понял

Подобный подход реализован в аналогичных проектах Spring и Dropwizard. По принципу "чем больше уровней конфигурации, тем лучше". С типизацией проблем никаких нет -- большие куски конфигурационной логики размещаются в DI в виде кода, а отдельные параметры сеттятся/инжектируются в параметры конструкторов/методов или поля классов, и соответвствие типов проверяется рантаймом (YAML и JSON поддерживают типы, а конвертацией строковых CLI и JVM параметров занимается фреймворк).

Типы они-то поддерживают, но не проверяют, как и имена.
А DI-код компилируется при сборке.

Вообще у нас подход такой- если конфиг правит разработчик- тут всё просто- можно и офмф-код.
Если онбордер- он делает merge-request (ну или patchset в gerrit) и одновременно копипастит это либо в (самописный) UI для puppet'а, либо в consul. Приложение при рестарте (или по таймеру) подхатывает изменения- и тут никакие DI уже не катят.

Я хочу, чтобы онбордер правил конфиги в проекте (с полной проверкой всего IDEA) и подкладывал изменения в нужный UI. Если это java-код, то надо либо писать многобукв (что тяжело), либо копипастить фрагменты (что чревато ошибками), либо groovy/kts.
В одном из проектов сделали groovy для _некоторых_ конфигов (там нужно в конфиге писать функции), теперь жду kotlin 1.1.2 для перевода в kts всего этого.

Но я задумался, что может писать _все_ конфиги в kts.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426231
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд, скриптовые конфиги - это путь в никуда.
Конфиг - это набор данных, специфичных для конкретного окружения. Идеальный (имхо) конфиг - это переменные окружения :)

Если дать возможность в конфиге писать логику, она там очень скоро появится... Получим логику, специфичную для окружения. А это рай для админов и ад для разработчиков, которые продукт поддерживают.

Есть похожий пример из соседней области - gradle. На моей памяти любой большой проект на грэдле быстро превращается в "ant" с кучей императивщины.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426232
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Не понимаю ажиотажа вокруг kotlin. Были уже Xtend и Ceylon в той же категории, оказались особо не нужны. Кроме как популярностью Idea и агрессивным маркетингом Jetbrains не могу объяснить хайп вокруг котлина...
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426363
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

Теперь я понял, о чем вы говорите. Проблема опечаток и ошибок действительно существует. В приложениях мы ее решаем с помощью Ctrl+C/Ctrl+V, возможностей текстового редактора по автоматической смене регистра, ну и, конечно, такого именования параметров, когда тип более-менее понятен из названия. Если тип не понятен, сверяемся с кодом или авто-собираемой схемой конфигурации приложения (фича Bootique). Т.е. сводим к проблеме дисциплины и чистого кода.

Идея валидации конфига в compile-time звучит очень интересно. У нас файл конфигурации используется только в приложении для определения дефолтных настроек и упаковывается вместе с приложением в jar. Отдельные параметры специфичные для среды или сценария запуска (обычно это простые значения: логины, пароли, хосты/порты и т.п.) переопределяются через JVM/CLI. Т.е. файл в нашем случае - это аналог вашего "мега-класса", доступ к нему осуществляется только из IDE, и, действительно, было бы логично иметь какой-то статический валидатор.

Если позволите, вопрос по вашему подходу. Есть ли возможность использовать собственные типы, или только стандартные + коллекции?
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426480
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TЕсли позволите, вопрос по вашему подходу. Есть ли возможность использовать собственные типы, или только стандартные + коллекции?

А это и есть тот баг, который поправили в 1.1.2 (жду выхода).
import (своих классов) в 1.1.1 работает в IDEA, но не работает в maven (gradle/bazel не проверял).
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426481
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезPS. Не понимаю ажиотажа вокруг kotlin.

Разработка ПО (включая разработку языков) это тонкий баланс между кучей разных крайностей.
На мой взгляд из существующих статически-типизированных ООП языков kotlin лучше всего выдерживает баланс.
java - просто пример "как делать не надо", ceylon слился в экстазе с jboss (тащит их либы), плюс баги (кто пробовал- говорит их мбольше) scala потеряла простоту и обзавелась кучей непонятных закоулков и способов выстрелить в ногу.
Ну и да, возможность обсудить с автором языка почему что и как было сделано- это существено.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426485
RonibIII
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

STS + SpringBoot + starters и не занимаешься той ерундой которая описана выше в по топику. Один файл настроики и все. Ну если хочешь свой лог писать то указываешь где log.xml.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426496
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominAndrei TЕсли позволите, вопрос по вашему подходу. Есть ли возможность использовать собственные типы, или только стандартные + коллекции?

А это и есть тот баг, который поправили в 1.1.2 (жду выхода).
import (своих классов) в 1.1.1 работает в IDEA, но не работает в maven (gradle/bazel не проверял).

Отлично!

Есть ли поддержка полиморфизма? Скажем, есть настроечный параметр "Коннектор", в приложении это будет некий интерфейс Connector; в конфиг-модуле будет несколько параметров типа Connector. Для разных параметров коннектор может быть разного типа: jdbc, file, http и т.п. Интересует вот что:
1) поддерживаются ли в принципе такие параметры, которые объявлены в Java-коде как имеющие абстрактный тип?
2) если да, то умеет ли обсуждаемый механизм валидировать такие параметры?
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426500
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вдогонку второй вопрос. С какой степенью гранулярности осуществляется переопределение параметров? Могу ли я переопределить одно поле параметра составного типа, или потребуется переопределять весь параметр целиком? Можно ли переопределить значение ключа в словаре (если есть поддержка Map)?
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426594
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TЕсть ли поддержка полиморфизма? Скажем, есть настроечный параметр "Коннектор", в приложении это будет некий интерфейс Connector; в конфиг-модуле будет несколько параметров типа Connector. Для разных параметров коннектор может быть разного типа: jdbc, file, http и т.п. Интересует вот что:
1) поддерживаются ли в принципе такие параметры, которые объявлены в Java-коде как имеющие абстрактный тип?
2) если да, то умеет ли обсуждаемый механизм валидировать такие параметры?

Всё есть. Можно считать, конфиг kts- это код на kotlin.
Отличие только в том, что kotlin-script это скрипт :) который удобнее выполнять в runtime без вызова javac или других компиляторов.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426596
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominДобрый день!

Всё что ниже- это расуждения, никак не руководство "бежать и делать". Хотя бы потому, что не исправлена критичная
В т.ч. можно и лямбды писать (чего в конфигах нет вообще).

Далее выполняется конфиг и на выходе получаем готовый объект с параметрами, которые можно передавать тому же guice/springio

Интересно послушать умные мысли, как за, так и против.



Прошу прощения, я лично против.
По большому в spring-е сейчас никто не мешает делать конфигурирование ч/з Java.
А переносить часть логики в конфиги вне ЯП... по мне это плохое решение.

По мне .propertues, .yaml, .json достаточно для хранения изменяемых параметров/констант.
А их проверку/логику выносить в Java-конфиги.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426839
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominДиезPS. Не понимаю ажиотажа вокруг kotlin.

Разработка ПО (включая разработку языков) это тонкий баланс между кучей разных крайностей.
На мой взгляд из существующих статически-типизированных ООП языков kotlin лучше всего выдерживает баланс.
java - просто пример "как делать не надо", ceylon слился в экстазе с jboss (тащит их либы), плюс баги (кто пробовал- говорит их мбольше) scala потеряла простоту и обзавелась кучей непонятных закоулков и способов выстрелить в ногу.
Ну и да, возможность обсудить с автором языка почему что и как было сделано- это существено.

Оффтоп, конечно.. ну да ладно, пятница )

На мой взгляд, в реальной жизни приживаются именно крайности - какие-то явные преимущества, которых нет у других решений.

Scala - полноценная функциональщина, Groovy - полноценная динамика, Clojure - мощное метапрограммирование.

А Kotlin что дает по сравнению с Java? Синтаксический сахар и немного защиты от NPE...
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426846
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman @ConfigurationProperties / @PropertySource Alexey TominМогу ошибиться в типе (да хоть ввести 1.3е10 с русской "е")Будет ошибка:
Код: java
1.
java.lang.IllegalArgumentException: Cannot convert value

Ошибка будет также в случае несуществующего имени свойства (опечатка и пр.).
Все ок.
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426885
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin, можно порассуждать на тему - зачем вообще нужны конфиги.

Если у нас есть язык который будет над-множеством грамматики над
конфигами - тогда теряется различие между кодом и данными.

С этой точки зрения кусок кода на lisp (только для примера)
Код: javascript
1.
2.
3.
4.
(module (param1 1.3)
    (param2 "Value")
    (param3 ("val1" "val2")
)


можно толковать как код и как DSL. Разница только в том
через какой инструмент мы на него посмотрим.

Я какое-то время создавал на проекте "идеальный" конфигуратор.
И когда я понял что через java-рефлексию я создаю экземпляры
классов из .properties то я задумался - а зачем тогда вообще
нужен умный конфигуратор - если язык всеравно умнее.

Что мы пытаемся кому-то доказать создавая умные конфигурации?

Нет-ли в этом ловушки или парадокса?
...
Рейтинг: 0 / 0
Размышления на тему конфигов
    #39426910
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominЯ могу ошибиться в имени и не заметить этого- IDEA часто не видит использования проперти...
А что вместо? А например kotlin-script.

Пользоваться IDEA вообще нецелосообразно (это коммерческое IDE хуже бесплатных), поэтому отдельные его недостатки несущественны. Но совсем неправильно предлагать идеи для их исправления. Это на руку новым русским - "хозяевам" фирмы JetBrains (идиотское название, ну не буду сейчас насмехаться). Эти личности плохо себя ведут: скрывают российское происхождение фирмы, ничего не сделали для российских пользователей: ни скидки не дали для своих, ни интерфейс не русифицировали. Как-то выпустили книгу по IDEA 4.5... как раз перед выходом 5. Потом я видел жалобу одного из авторов книги: её экземпляр авторам не подарили, а предложили купить. Эти новые русские просто обезумели от жадности. Помогать им - себя не уважать.
Не знакомился с Kotlin и не буду: отталкивает непристойное происхождение от этой фирмы.
...
Рейтинг: 0 / 0
25 сообщений из 67, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Размышления на тему конфигов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]