Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Spring Boot стартер для Tomcat
spring-boot-starter-web — это основной стартер для встроенного Tomcat в Spring Boot приложениях. Это самый популярный стартер для разработки web приложений на Java.
Основной стартер: spring-boot-starter-web
spring-boot-starter-web включает:
- Embedded Tomcat — встроенный веб-сервер
- Spring Web MVC — фреймворк для создания REST API и web приложений
- Validation — для валидации данных
- Jackson — для JSON обработки
- Логирование (Logback)
<!-- Maven pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
// Gradle build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.0'
}
Что входит в spring-boot-starter-web
При добавлении этого стартера Spring Boot автоматически:
- Запускает встроенный Tomcat на порте 8080 (по умолчанию)
- Конфигурирует DispatcherServlet для обработки HTTP запросов
- Инициализирует ApplicationContext для dependency injection
- Включает Jackson для сериализации/десериализации JSON
- Настраивает обработчики ошибок (exception handling)
Простой REST контроллер
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = new User(id, "John Doe", "john@example.com");
return ResponseEntity.ok(user);
}
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
User created = new User(1L, user.getName(), user.getEmail());
return ResponseEntity.status(HttpStatus.CREATED).body(created);
}
}
Конфигурация Tomcat
application.properties
# Порт
server.port=8080
# Контекст path
server.servlet.context-path=/api
# Tomcat configuration
server.tomcat.threads.max=200
server.tomcat.threads.min-spare=10
server.tomcat.max-connections=10000
server.tomcat.max-http-post-size=2097152
server.tomcat.connection-timeout=20000
server.tomcat.accept-count=100
application.yml
server:
port: 8080
servlet:
context-path: /api
tomcat:
threads:
max: 200
min-spare: 10
max-connections: 10000
max-http-post-size: 2097152
Альтернативные встроенные серверы
Spring Boot позволяет использовать другие серверы вместо Tomcat:
1. Jetty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
Нужно исключить Tomcat из spring-boot-starter-web:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
2. Undertow
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
3. Netty (Reactive)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Сравнение встроенных серверов
| Сервер | Стартер | Особенности | Лучше для |
|---|---|---|---|
| Tomcat | spring-boot-starter-web | Классический, надёжный | Servlet-based приложений |
| Jetty | spring-boot-starter-jetty | Лёгкий, быстрый | Высоконагруженных систем |
| Undertow | spring-boot-starter-undertow | Отличная производительность | Микросервисов |
| Netty | spring-boot-starter-webflux | Асинхронный, non-blocking | Reactive приложений |
Структура зависимостей spring-boot-starter-web
spring-boot-starter-web
├── spring-boot-starter
│ ├── spring-boot
│ ├── spring-boot-autoconfigure
│ └── logback + slf4j
├── spring-boot-starter-tomcat
│ ├── tomcat-embed-core
│ ├── tomcat-embed-el
│ └── tomcat-embed-websocket
├── spring-web
├── spring-webmvc
├── spring-boot-starter-validation
└── jackson-databind
Embedded Tomcat конфигурация в коде
@Configuration
public class TomcatConfiguration {
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return container -> {
container.setPort(9090);
// Дополнительная конфигурация
};
}
// Или через WebServerFactoryCustomizer (Spring Boot 2.0+)
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return factory -> {
factory.setPort(9090);
factory.addConnectorCustomizers(connector -> {
connector.setMaxConnections(10000);
connector.setMaxPostSize(2097152);
});
};
}
}
Запуск Spring Boot приложения
# Maven
mvn spring-boot:run
# Gradle
gradle bootRun
# JAR файл
java -jar application.jar
java -jar application.jar --server.port=9090
Проверка работающего сервера
# Проверить порт
curl http://localhost:8080/api/users/1
# Проверить Actuator health
curl http://localhost:8080/actuator/health
# Проверить метрики
curl http://localhost:8080/actuator/metrics
Когда использовать встроенный vs внешний Tomcat
Встроенный Tomcat (рекомендуется):
- Микросервисы
- Контейнеризация (Docker)
- Простые приложения
- CI/CD pipelines
- Шпон экосистема (Spring Cloud)
Внешний Tomcat:
- Legacy приложения
- Мультиплексирование нескольких приложений
- Специальная конфигурация сервера
- Production инфраструктура (редко)
Производительность и настройки
# Оптимизация Tomcat для высоконагруженной системы
server.tomcat.threads.max=500
server.tomcat.threads.min-spare=50
server.tomcat.max-connections=50000
server.tomcat.accept-count=1000
server.tomcat.keep-alive-timeout=60000
server.tomcat.max-keep-alive-requests=100
# Для больших файлов
server.tomcat.max-http-post-size=52428800 # 50 MB
# Настройка connection pool
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
Мониторинг Tomcat
@RestController
public class ActuatorController {
@GetMapping("/tomcat-info")
public ResponseEntity<Map<String, Object>> getTomcatInfo() {
Map<String, Object> info = new HashMap<>();
info.put("server", "Tomcat");
info.put("port", 8080);
return ResponseEntity.ok(info);
}
}
Итоговый ответ: spring-boot-starter-web — это стартер для встроенного Tomcat в Spring Boot приложениях. Он включает Tomcat, Spring MVC, валидацию и Jackson. Это стандартный выбор для большинства web приложений на Java, так как обеспечивает простоту развёртывания (всё в одном JAR файле) и удобство разработки.