Встроенные серверы — это те самые супергерои, которые позволяют запускать ваши приложения Spring Boot прямо из коробки. Вам больше не нужно вручную настраивать, устанавливать и конфигурировать такие классические серверы приложений, как Apache Tomcat или Jetty. Spring Boot заботится об этой рутине, предоставляя встроенные серверы.
Преимущества использования встроенных серверов:
- Быстрота разработки и тестирования: запуск приложения занимает всего пару секунд. Вы просто нажимаете "Run".
- Упрощенная доставка приложения: весь сервер уже встроен в ваш JAR-файл. Вам достаточно развернуть один файл, а не заботиться о конфигурации сервера.
- Поддержка DevOps-процессов: контейнеризация (например, Docker) становится проще, потому что весь стек приложения лежит в одном месте.
- Единообразие среды разработки и продакшена: вы можете быть уверены, что приложение запустится везде одинаково, будь то ваша машина, staging или продакшен.
Итак, если раньше вы тратили часы на настройку Tomcat, то теперь Spring Boot говорит вам: "расслабьтесь, я обо всём позабочусь".
1. Какие серверы поддерживает Spring Boot?
Spring Boot поддерживает несколько популярных встроенных серверов. Вот основные из них:
| Сервер | Описание |
|---|---|
| Tomcat | Используется по умолчанию. Настолько популярен, что даже мемчики с котиками отдыхают |
| Jetty | Легковесный сервер для разработчиков, которые любят минимализм |
| Undertow | Высокопроизводительный сервер, который может обрабатывать миллионы запросов |
По умолчанию используется Apache Tomcat, но вы легко можете заменить его на Jetty или Undertow, если хотите.
2. Настройка встроенного сервера
2.1. Изменение порта сервера
По умолчанию Spring Boot запускает ваш сервер на порту 8080. Но что если 8080 уже занят? (Например, на этом порту работает ваш любимый пет-проект о котиках).
Чтобы поменять порт, достаточно указать его в файле application.properties:
server.port=9090
Или, если вы используете YAML (потому что он выглядит профессиональнее):
server:
port: 9090
Теперь ваше приложение услышит ваш HTTP-запрос на порту 9090.
2.2. Изменение сервера
Если Tomcat вам не по душе, вы можете подключить другой сервер. Например, Jetty. Это делается очень просто:
- Удалите зависимость
spring-boot-starter-tomcatизpom.xml. - Добавьте зависимость
spring-boot-starter-jetty.
Для Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
Для Gradle:
implementation 'org.springframework.boot:spring-boot-starter-jetty'
После перезапуска проекта Spring Boot автоматически переключится на Jetty. Да, всё так быстро! Такое чувство, что вы просто переключили канал на телевизоре.
2.3. Настройка других параметров
Spring Boot также позволяет настроить множество других параметров для сервера. Вот несколько часто используемых:
- Максимальный размер тела запроса:
server.tomcat.max-http-post-size=2097152 # 2MB - Задержка тайм-аута:
server.connection-timeout=5000 # 5000ms - Контекстный путь (если ваше приложение доступно по
/myapp):server.servlet.context-path=/myapp
Теперь ваше приложение будет доступно по адресу http://localhost:8080/myapp.
3. Встроенные серверы и микросервисы — идеальная пара
В микросервисной архитектуре каждый сервис живёт своей жизнью. Как отдельная квартира в большом доме — со своей кухней, ванной и отдельным входом. Встроенные серверы Spring Boot отлично подходят для такого подхода: они делают каждый сервис полностью автономным.
Что это даёт на практике?
- Хотите обновить один сервис? Вперёд! Остальные даже не заметят
- Нужно упаковать сервис в Docker? Легко — сервер уже внутри
- Забудьте про настройку огромного общего сервера приложений
Результат? Компактные, независимые сервисы, которые можно развернуть где угодно и когда угодно.
4. Встроенные серверы упрощают CI/CD
Когда вы начнёте настраивать автоматическую сборку и развёртывание (CI/CD), встроенные серверы станут вашими лучшими друзьями. Почему?
Представьте конвейер:
- Собрали приложение в один JAR-файл — как коробку со всем необходимым
- Взяли эту коробку и поставили куда нужно — она сразу работает
- Никаких "а вот на тестовом сервере не запускается, потому что версия не та"
Всё просто: где JAR — там и сервер, а значит, приложение будет работать одинаково везде.
5. Легко ли использовать встроенные серверы?
Конечно! Давайте напишем небольшой пример.
Шаг 1: Создадим приложение с использованием встроенного Tomcat
Используя Spring Initializr (или руками в pom.xml), добавьте зависимость:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Этот стартовый модуль автоматически подключит Tomcat.
Шаг 2: Напишем простой контроллер
Создайте файл HelloController.java:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/")
public String sayHello() {
return "Привет из встроенного Tomcat!";
}
}
Шаг 3: Запустим приложение
Запустите приложение. Теперь оно доступно по адресу: http://localhost:8080. Томкат уже готов обслуживать ваши запросы.
6. Подводные камни (да, они есть)
Хотя встроенные серверы делают жизнь проще, есть пара нюансов:
- Вес приложения: добавление встроенного сервера увеличивает размер JAR-файла. Но это компенсируется удобством.
- Производительность: каждый микросервис запускает свой сервер, что может потребовать больше ресурсов на виртуальных машинах.
Но если ваши приложения минималистичны и правильно настроены, эти проблемы легко решаются.
Итак, встроенные серверы — это не просто инструмент, это ваш главный помощник в создании быстрого, удобного и переносимого приложения. В следующей лекции мы потренируемся создавать приложения Spring Boot.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ