Как стать автором
Поиск
Написать публикацию
Обновить
599.28
OTUS
Развиваем технологии, обучая их создателей

Как создать кастомный Starter для Spring Boot

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.2K

Привет, Хабр!

Сегодня поговорим о Spring Boot Starter'ах. Зачем они нужны? Когда проект разрастается до десятков микросервисов, вы сталкиваетесь с тем, что:

  • Код дублируется: один и тот же логгер, Redis или Kafka — всё настраивается вручную.

  • Отсутствие стандартизации: в одном проекте логгер пишет в /logs, в другом — прямо в консоль. Ну как так?

  • Сложность поддержки: каждый раз правка конфигурации превращается в марафон: нужно всё менять во всех микросервисах.

Здесь и приходят на помощь Spring Boot Starter'ы. Они позволяют:

  • Упрощать подключение зависимостей.

  • Автоматически конфигурировать сервисы.

  • Давать возможность гибкой настройки через application.properties.

Сегодня я покажу, как создавать кастомные Starter'ы, которые помогут сэкономить время и стандартизировать конфигурации во всех микросервисах.

Что такое Spring Boot Starter и как он работает?

Starter — это не просто библиотека. Это возможность автоматической настройки компонентов вашего приложения через автоконфигурацию. Важные моменты:

  • Автоконфигурация: класс с аннотацией @Configuration, который автоматически создаёт нужные бины.

  • Условные аннотации: такие как @ConditionalOnClass, @ConditionalOnProperty — они управляют активацией конфигурации.

  • Конфигурационные свойства: настраиваем через application.properties или application.yml.

  • Регистрация: Spring знает о вашей автоконфигурации через файл META-INF/spring.factories.

Пишем свой Starter

Предположим, в проекте используется кастомный логгер. Вместо того, чтобы настраивать его вручную в каждом микросервисе, создадим Starter, который:

  • Подключает логгер автоматически.

  • Настраивается через application.properties.

  • Работает в продакшене.

Шаг 1: минимальный pom.xml для Starter'а

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>custom-logger-starter</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
    </dependencies>
</project>

Подключаем spring-boot-autoconfigure, чтобы иметь возможность создавать автоконфигурации. Starter — это обычный jar, который подключается как зависимость.

Шаг 2: пишем класс автоконфигурации

@Configuration
@ConditionalOnClass(Logger.class) // Логгер будет подключаться только при наличии этого класса
@EnableConfigurationProperties(LoggerProperties.class) // Подключаем свойства логгера
public class LoggerAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean // Если бин логгера уже есть, не будем его перезаписывать
    public Logger customLogger(LoggerProperties properties) {
        return new Logger(properties.getName(), properties.isDebug());
    }
}

@ConditionalOnClass(Logger.class) — логгер подключится, только если класс Logger присутствует в контексте.

@ConditionalOnMissingBean — предотвращает создание нового бина логгера, если он уже был настроен в приложении.

Шаг 3: Конфигурационные свойства

Создадим класс для конфигурации логгера, который будет настраиваться через application.properties.

@ConfigurationProperties(prefix = "custom.logger")
public class LoggerProperties {
    private String name = "DefaultLogger";
    private boolean debug = false;

    // Getters и Setters
}

Теперь можно настроить логгер в application.properties:

custom.logger.name=MyAwesomeLogger
custom.logger.debug=true

Шаг 4: Регистрируем автоконфигурацию

Теперь создаём файл META-INF/spring.factories, чтобы Spring Boot знал о стартере.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.logger.LoggerAutoConfiguration

Тестирование и мониторинг

После того как написали Starter, удостоверимся, что всё работает как надо. Для этого напишем тест:

@SpringBootTest(properties = "custom.logger.name=TestLogger")
public class LoggerAutoConfigurationTest {

    @Autowired
    private Logger logger;

    @Test
    public void testLoggerConfiguration() {
        assertEquals("TestLogger", logger.getName());
    }
}

Здесь проверяем, что логгер инициализируется с настройками, переданными в application.properties.

А если хочется отслеживать, как часто используется логгер, можете интегрировать его с Micrometer:

@Bean
public Counter logCounter(MeterRegistry registry) {
    return Counter.builder("logger.calls")
                  .description("Number of log calls")
                  .register(registry);
}

Теперь можно мониторить количество вызовов логгера через метрики.


Заключение

Кастомные Spring Boot Starter'ы — это мощный инструмент для упрощения конфигурации в многокомпонентных проектах. С их помощью можно:

  • Стандартизировать использование общих сервисов, как логгеры или клиенты для Redis.

  • Автоматизировать конфигурацию и исключить ошибки.

  • Сделать некую гибкость настройки через application.properties.

Если у вас есть опыт работы с Starter'ами или свои советы — делитесь в комментариях.

А 23 января в Otus пройдет открытый урок «OpenAPI + Spring». На нём участники рассмотрят, как OpenAPI спецификация и связанные с ней инструменты могут помочь при решении типовых задач веб-разработки на Spring. Записаться можно бесплатно по ссылке.

Теги:
Хабы:
Всего голосов 10: ↑8 и ↓2+9
Комментарии0

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS