JavaRush /Курси /Модуль 5. Spring /Вбудовані сервери Spring Boot

Вбудовані сервери Spring Boot

Модуль 5. Spring
Рівень 4 , Лекція 5
Відкрита

Вбудовані сервери — це ті самі супергерої, які дозволяють запускати ваші застосунки Spring Boot прямо з коробки. Вам більше не потрібно вручну налаштовувати, встановлювати і конфігурувати такі класичні сервери додатків, як Apache Tomcat або Jetty. Spring Boot піклується про цю рутину, надаючи вбудовані сервери.

Переваги використання вбудованих серверів:

  1. Швидкість розробки й тестування: запуск застосунку займає всього кілька секунд. Ви просто натискаєте "Run".
  2. Спрощена доставка застосунку: весь сервер вже вбудований у ваш JAR-файл. Достатньо розгорнути один файл, а не турбуватися про конфігурацію сервера.
  3. Підтримка DevOps-процесів: контейнеризація (наприклад, Docker) стає простішою, бо весь стек застосунку лежить в одному місці.
  4. Однорідність середовища розробки і продакшна: ви можете бути впевнені, що застосунок запуститься скрізь однаково, будь то ваша машина, staging або production.

Отже, якщо раніше ви витрачали години на налаштування Tomcat, то тепер Spring Boot каже вам: "розслабтеся, я про все подбаю".


1. Які сервери підтримує Spring Boot?

Spring Boot підтримує кілька популярних вбудованих серверів. Ось основні з них:

Сервер Опис
Tomcat Використовується за замовчуванням. Такий популярний, що навіть мемчики з котиками відпочивають
Jetty Легковаговий сервер для розробників, які люблять мінімалізм
Undertow Високопродуктивний сервер, який може обробляти мільйони запитів

За замовчуванням використовується Apache Tomcat, але ви легко можете замінити його на Jetty або Undertow, якщо хочете.


2. Налаштування вбудованого сервера

2.1. Зміна порту сервера

За замовчуванням Spring Boot запускає ваш сервер на порті 8080. Але що якщо 8080 вже зайнятий? (Наприклад, на цьому порту працює ваш улюблений pet-проєкт про котиків).

Щоб змінити порт, достатньо вказати його у файлі application.properties:


server.port=9090

Або, якщо ви використовуєте YAML (бо він виглядає професійніше):


server:
  port: 9090

Тепер ваш застосунок почує ваш HTTP-запит на порті 9090.

2.2. Заміна сервера

Якщо Tomcat вам не до душі, ви можете підключити інший сервер. Наприклад, Jetty. Це робиться дуже просто:

  1. Видаліть залежність spring-boot-starter-tomcat з pom.xml.
  2. Додайте залежність 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), вбудовані сервери стануть вашими найкращими друзями. Чому?

Уявіть конвеєр:

  1. Зібрали застосунок в один JAR-файл — як коробку з усім необхідним
  2. Взяли цю коробку і поставили куди треба — вона одразу працює
  3. Ніяких "а от на тестовому сервері не запускається, бо версія не та"

Все просто: де 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. Tomcat уже готовий обслуговувати ваші запити.


6. Підводні камені (так, вони є)

Хоча вбудовані сервери спрощують життя, є кілька нюансів:

  1. Вага застосунку: додавання вбудованого сервера збільшує розмір JAR-файла. Але це компенсується зручністю.
  2. Продуктивність: кожен мікросервіс запускає свій сервер, що може вимагати більше ресурсів на віртуальних машинах.

Але якщо ваші застосунки мінімалістичні і правильно налаштовані, ці проблеми легко вирішуються.


Отже, вбудовані сервери — це не просто інструмент, це ваш головний помічник у створенні швидкого, зручного й переносного застосунку. У наступній лекції потренуємося створювати застосунки Spring Boot.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ