Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 9

Вот тут https://habr.com/ru/companies/piter/articles/506872/ был обзор отличной книги в которой есть целая глава, посвященная созданию собственных стартеров. Правда, для 2-й версии бута

Спасибо за информацию! Когда разбирался со спрингом, я использовал книги от Manning (Spring in Action, Spring Security in Action, Spring Microservices in Action) и ни в одной не было информации по созданию своего стартера.

Чтобы Spring знал о дефолтных настройках стартера, необходимо их зачитать. 

Можно объявить значения по умолчанию в файле OpenWeatherMapProperties, чтобы не городить огород с PostProcessor.

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

Гораздо проще, когда у стартера есть готовый yaml файл с конфигом, который можно скопипастить и проставить свои значения.

Кстати, действительно - совсем не обязательно городить PostProcessor. Бывают случаи когда yaml файл вообще добавляется для примера настроек и значений, с которыми работает стартер. То есть конфигурация из него не учитывается, а лежит чисто для облегчения копи-паста. Тоже рабочий вариант.

Да, Вы все верно пишите. Но что файл с дефолтным конфигом, что определение значений по умолчанию, все равно находится в коде стартера. И разработчику все равно придётся копаться в исходниках.

Самый лучший вариант - внести описание настроек и значений по умолчанию в документацию)

Хм... ну вообще-то есть намного более простой и стандартный способ - использовать spring-boot-configuration-processor. Тогда пользователь стартера увидит дефолтные значения в подсказках IDEA'и, когда будет их редактировать - они будут в файле spring-configuration-metadata.json и IDEA будет их отображать в подсказках пользователю.

Спасибо за статью!

Рад, что статья оказалось полезной! ?

Спасибо за статью! Периодически пытаюсь освежить своим знания по этой теме и у меня есть ещё один вариант, который даёт унаследовать дефолтные значения из default.yml стартера.

При этом не нужно указывать название этого файла и группу свойств. Я про кастомную фабрику для стартера. Ниже пример кода стартера, который сработал у меня (SB3, Kotlin):

@PropertySource(value = ["classpath:default.yml"], factory = CustomConfigPropertiesReaderFactory::class)
class CustomConfigPropertiesReaderFactory : PropertySourceFactory {
    @Override
    override fun createPropertySource(name: String?, resource: EncodedResource): PropertySource<out Any> =
        resource.resource.let {
            it.filename.let { filename ->
                val factory = YamlPropertiesFactoryBean()
                factory.setResources(it)
                PropertiesPropertySource(filename!!, factory.getObject()!!)
            }
        }
}

P.S.: хотел попробовать статью свою написать, но перечитал эту и здесь уже нашёлся один из вариантов решения, так что оставляю просто комментарий.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации