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

Какой стартер имеет Tomcat?

1.7 Middle🔥 191 комментариев
#Основы Java

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

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

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

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 автоматически:

  1. Запускает встроенный Tomcat на порте 8080 (по умолчанию)
  2. Конфигурирует DispatcherServlet для обработки HTTP запросов
  3. Инициализирует ApplicationContext для dependency injection
  4. Включает Jackson для сериализации/десериализации JSON
  5. Настраивает обработчики ошибок (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>

Сравнение встроенных серверов

СерверСтартерОсобенностиЛучше для
Tomcatspring-boot-starter-webКлассический, надёжныйServlet-based приложений
Jettyspring-boot-starter-jettyЛёгкий, быстрыйВысоконагруженных систем
Undertowspring-boot-starter-undertowОтличная производительностьМикросервисов
Nettyspring-boot-starter-webfluxАсинхронный, non-blockingReactive приложений

Структура зависимостей 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 файле) и удобство разработки.