← Назад к вопросам

Создавал ли Starter

3.0 Senior🔥 171 комментариев
#Docker, Kubernetes и DevOps#JVM и управление памятью#ORM и Hibernate

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Spring Boot Starter: опыт разработки

Да, я создавал свой Spring Boot Starter для внутреннего использования в компании. Расскажу о процессе.

Зачем создавать Starter?

В компании было несколько микросервисов, и каждый заново:

  • Настраивал логирование
  • Добавлял метрики (Prometheus)
  • Конфигурировал трейсинг (Jaeger)
  • Делал health checks
  • Настраивал безопасность

Зачем повторяться? Создали свой Starter.

Структура Starter

my-company-spring-boot-starter/
├── spring-boot-starter-mycompany/
│   ├── src/main/java/
│   │   └── com/mycompany/starter/
│   │       ├── logging/
│   │       ├── metrics/
│   │       ├── tracing/
│   │       ├── health/
│   │       └── autoconfigure/
│   ├── pom.xml
│   └── application.yml
└── pom.xml

Ключевые компоненты

1. Auto-configuration class

@Configuration @EnableConfigurationProperties(MyCompanyProperties.class) @ConditionalOnMissingBean

public class MyCompanyAutoConfiguration {
    
    @Bean
    public LoggingConfigurer loggingConfigurer() {
        return new LoggingConfigurer();
    }
    
    @Bean
    public MetricsRegistrar metricsRegistrar() {
        return new MetricsRegistrar();
    }
}

2. Properties class

@ConfigurationProperties(prefix = "mycompany")

public class MyCompanyProperties {
    private Logging logging = new Logging();
    private Metrics metrics = new Metrics();
    
    public static class Logging {
        private String level = "INFO";
        private boolean includeStackTrace = true;
    }
}

3. spring.factories (или @SpringBootApplication для Spring Boot 2.7+)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.mycompany.starter.autoconfigure.MyCompanyAutoConfiguration

Как используется

В микросервисе просто добавляешь зависимость:

<dependency> ``` <groupId>com.mycompany</groupId> <artifactId>spring-boot-starter-mycompany</artifactId> <version>1.0.0</version> ``` </dependency>

И вся конфигурация готова. В application.yml:

mycompany: logging:

    level: DEBUG
    includeStackTrace: true

metrics:

    enabled: true

Что дал Starter

  • Сокращение кода в 5 микросервисах на 500+ строк
  • Единая конфигурация логирования везде
  • Одна версия библиотек (Prometheus, Jaeger)
  • Consistency в компании
  • 10 минут на подключение вместо 2 часов

Проблемы, которые встретили

1. Версионирование

  • Starter версия 1.0.0, но разные микросервисы используют разные версии
  • Решение: semver (major.minor.patch) и clear changelog

2. Конфликты зависимостей

  • Starter требует Jackson 2.14, но проект уже имеет 2.13
  • Решение: использовать правильные range версий в pom.xml

3. Когда отключать функционал

@ConditionalOnProperty(name = "mycompany.metrics.enabled", havingValue = "true")

public class MetricsAutoConfiguration { }

4. Тестирование Starter

@SpringBootTest

class MyCompanyStarterTest {
    @Test
    void autoConfigurationLoadsSuccessfully(@Autowired LoggingConfigurer configurer) {
        assertNotNull(configurer);
    }
}

Лучшие практики

  1. Назва должна быть descriptive: spring-boot-starter-mycompany-logging
  2. Документация: README с примерами
  3. Версионирование: semver обязателен
  4. Backward compatibility: не ломай версии при обновлении
  5. Тесты: покрытие >80%

Publishing Starter

Обычно в компании используют внутренний Artifactory:

<distributionManagement> ``` <repository> <id>company-artifactory</id> <url>https://artifactory.mycompany.com/artifactory/release</url> </repository> ``` </distributionManagement>

И в settings.xml:

<server> ``` <id>company-artifactory</id> <username>your-username</username> <password>your-password</password> ``` </server>

Вывод

Создание своего Starter — отличный способ:

  • Унифицировать конфигурацию
  • Сократить boilerplate код
  • Обучить других разработчиков лучшим практикам
  • Демонстрировать знание Spring Boot internals
Создавал ли Starter | PrepBro