Что такое Spring Boot и каковы его ключевые особенности?

Ответ

Spring Boot — это фреймворк поверх Spring, созданный для быстрой разработки и минимальной конфигурации standalone-приложений. Он следует принципу "convention over configuration" (соглашения вместо конфигураций).

Ключевые особенности:

  1. Автоконфигурация (Auto-configuration): Автоматически настраивает компоненты Spring и сторонних библиотек на основе classpath и заданных свойств.
  2. Стартеры (Starters): Зависимости spring-boot-starter-*, которые объединяют всё необходимое для конкретной технологии (например, spring-boot-starter-web, spring-boot-starter-data-jpa).
  3. Встроенные серверы (Embedded Servers): Содержит Tomcat, Jetty или Undertow, поэтому приложение запускается как обычный JAR-файл, без развертывания в отдельном веб-сервере.
  4. Actuator: Предоставляет готовые HTTP-эндпоинты для мониторинга и управления приложением (health, metrics, info).
  5. Внешняя конфигурация: Гибкое управление настройками через application.properties/application.yml, переменные окружения и аргументы командной строки.

Пример минимального Spring Boot приложения:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;

@SpringBootApplication // Объединяет @Configuration, @EnableAutoConfiguration, @ComponentScan
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args); // Запуск встроенного сервера
    }
}

@RestController
@RequestMapping("/api")
class HelloController {
    @GetMapping("/hello")
    public String sayHello(@RequestParam(defaultValue = "World") String name) {
        return String.format("Hello, %s!", name);
    }
}

Запуск: java -jar demo-application.jar.

Ответ 18+ 🔞

А, слушай, ну вот это Spring Boot, это ж просто пиздец какой праздник для ленивого разработчика! Ну реально, блядь, как будто тебе принесли готовый ужин в постель, только вместо ужина — работающее веб-приложение. Суть в чём, ёпта?

Раньше, чтобы поднять какой-нибудь простейший сервак на Spring, нужно было, блядь, конфигов на три ведра написать, XML'ей навертеть, бины поспринговать, сервлеты настроить... Короче, овердохуища работы, чтобы просто "Hello, World!" вывести. А тут приходит этот самый Spring Boot и такой: "Расслабься, мудила, я всё сделаю".

На что он способен, этот хитрожопый фреймворк:

  1. Автоконфигурация. Это вообще магия, блядь. Он смотрит, какие библиотеки у тебя в classpath'е валяются, и сам догадывается, что ты от него хочешь. Добавил зависимость на базу данных? Он уже готовит пул соединений, ёбта! Добавил JPA? Он EntityManager настраивает. Ты только успевай рот закрывать от удивления, пиздец.
  2. Стартеры (Starters). Это такие готовые наборы, как "Лего" для взрослых дядек. Хочешь веб-приложение? Бери spring-boot-starter-web — и тебе сразу и Tomcat, и MVC, и JSON-конвертеры. Хочешь работать с базой? spring-boot-starter-data-jpa тебе в руки. Никакого ебаного геморроя с подбором совместимых версий библиотек, всё в одном флаконе, красота.
  3. Встроенные серверы. Это вообще песня! Раньше нужно было приложение собрать в WAR, закинуть его в Tomcat, который отдельно скачал и запустил... А тут, сука, ты просто запускаешь JAR-файл, как обычную прогу, а внутри него уже сидит этот самый Tomcat (или Jetty, или Undertow — выбирай на вкус) и всё обслуживает. Удобно, блядь, до нельзя.
  4. Actuator. Ну это такая система слежки за собственным приложением. Тыкаешь по специальному URL — и тебе выдают, живое ли приложение, сколько памяти жрёт, какие эндпоинты есть. Для продакшена — вещь просто охуенная, волнение ебать снижает.
  5. Внешняя конфигурация. Настройки можно пихать куда угодно: в application.yml, в переменные окружения, в аргументы командной строки. Хочешь для разработки одни параметры, для прода — другие? Да похуй, легко. Никакого хардкода, всё гибко.

А вот смотри, как выглядит простейшее приложение, от которого у старого Spring-разработчика слёзы наворачиваются:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;

@SpringBootApplication // Эта одна аннотация заменяет, блядь, три других. Красота!
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args); // И поехали! Сервер стартует тут же.
    }
}

@RestController
@RequestMapping("/api")
class HelloController {
    @GetMapping("/hello")
    public String sayHello(@RequestParam(defaultValue = "World") String name) {
        return String.format("Hello, %s!", name);
    }
}

Собрал это дело в JAR, и запускаешь как бог: java -jar demo-application.jar

И всё, блядь! Сервер крутится, по http://localhost:8080/api/hello тебе уже "Hello, World!" отвечает. Ни одной строчки конфигурации! Вот это я понимаю — прогресс, ёпта. Раньше на это полдня убивали, а сейчас — пять минут и готово. Прям ебушки-воробушки, а не фреймворк.