Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Создание собственного Spring Boot Starter
Spring Boot Starter — это Maven модуль, который упрощает конфигурацию и интеграцию зависимостей. Вот полный гайд по созданию собственного стартера.
1. Структура проекта
Создайте два модуля:
- my-custom-starter-autoconfigure — логика автоконфигурации
- my-custom-starter — POM с зависимостями (мост для пользователей)
2. Модуль автоконфигурации
pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-custom-starter-autoconfigure</artifactId>
<version>1.0.0</version>
<name>My Custom Starter AutoConfigure</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
Класс с конфигурацией
@ConfigurationProperties(prefix = "app.myfeature")
public class MyFeatureProperties {
private String apiKey;
private int timeout = 5000;
private boolean enabled = true;
public String getApiKey() { return apiKey; }
public void setApiKey(String apiKey) { this.apiKey = apiKey; }
public int getTimeout() { return timeout; }
public void setTimeout(int timeout) { this.timeout = timeout; }
public boolean isEnabled() { return enabled; }
public void setEnabled(boolean enabled) { this.enabled = enabled; }
}
Класс сервиса
public class MyFeatureService {
private final MyFeatureProperties properties;
public MyFeatureService(MyFeatureProperties properties) {
this.properties = properties;
}
public String doSomething() {
if (!properties.isEnabled()) {
return "Feature disabled";
}
return "Doing something with API key: " + properties.getApiKey();
}
}
Автоконфигурация
@Configuration
@EnableConfigurationProperties(MyFeatureProperties.class)
@ConditionalOnClass(MyFeatureService.class)
@ConditionalOnProperty(
name = "app.myfeature.enabled",
havingValue = "true",
matchIfMissing = true
)
public class MyFeatureAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public MyFeatureService myFeatureService(MyFeatureProperties properties) {
return new MyFeatureService(properties);
}
}
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
Создайте файл src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
com.example.MyFeatureAutoConfiguration
Для Spring Boot < 3.0 используйте META-INF/spring.factories:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyFeatureAutoConfiguration
3. Модуль стартера
pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-custom-starter</artifactId>
<version>1.0.0</version>
<name>My Custom Starter</name>
<description>Custom Spring Boot Starter</description>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-custom-starter-autoconfigure</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
4. Использование стартера
Добавьте зависимость в приложение:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-custom-starter</artifactId>
<version>1.0.0</version>
</dependency>
В application.yml или application.properties:
app:
myfeature:
enabled: true
apiKey: your-secret-key
timeout: 3000
Используйте сервис в приложении:
@RestController
public class MyController {
private final MyFeatureService myFeatureService;
public MyController(MyFeatureService myFeatureService) {
this.myFeatureService = myFeatureService;
}
@GetMapping("/test")
public String test() {
return myFeatureService.doSomething();
}
}
5. Аннотации для автоконфигурации
Частые условия:
@ConditionalOnClass— если класс в classpath@ConditionalOnMissingBean— если bean не зарегистрирован@ConditionalOnProperty— если свойство установлено@ConditionalOnWebApplication— только для веб-приложений@AutoConfigureAfter— порядок загрузки
6. Публикация
Для публикации на Maven Central:
mvn clean deploy
Или локально:
mvn clean install
Полезные рекомендации
- Давайте осмысленные имена:
spring-boot-starter-* - Избегайте конфликтов с Official стартерами
- Документируйте свойства конфигурации
- Предоставляйте разумные defaults
- Используйте условные аннотации для гибкости
- Создавайте тесты для автоконфигурации
Вот и всё! Свой Starter готов к использованию в других проектах.