Итак, Spring — это фреймворк для Java, на котором пишут веб-приложения и микросервисы. А Spring Boot — это расширение, которое упрощает и ускоряет работу со Spring. Оно представляет собой набор утилит, автоматизирующих настройки фреймворка.
Spring Boot разработан для ускорения создания веб-приложений. Он отличается от своего «родителя» тем, что не требует сложной настройки и имеет ряд встроенных инструментов, упрощающих написание кода.
В отличие от базового фреймворка, он умеет:
упаковывать зависимости в стандартные starter-пакеты;
автоматически конфигурировать приложения с помощью jar-зависимостей;
использовать JavaConfig, что позволяет отказаться от использования XML;
не зависеть от множественного импорта Maven и конфликтов версий, связанных с этим;
обеспечивать мощную пакетную обработку и управлять конечными точками RES;
упрощать интеграцию с другими Java-фреймворками, такими как JPA / Hibernate ORM, Struts и так далее;
локально запускать встроенные HTTP-серверы, такие как Tomcat и Jetty, упрощая разработку и тестирование веб-приложений.
Всё это и привело к широкому распространению Spring Boot, сделав его основным инструментом для разработки веб-приложений при работе с фреймворком Spring.
Быстрый старт
Знакомство с библиотекой можно начать с официальной документации. В ней собраны краткие описания основных аннотаций, классов и методов, а также разобраны практические примеры их использования. После этого лучше перейти на «продвинутую» документацию с разбором методов работы с JSON, логированием, тестированием и другими деталями.
Для отработки знаний на практике у Spring Boot есть большой гайд с разработкой отдельных приложений и их частей. И конечно, не стоит забывать официальную документацию самого фреймворка Spring. В ней подробно разобрана работа не только с Boot, но и с другими модулями.
Преимущества Spring Boot в работе
Spring Boot «из коробки» имеет несколько инструментов, ускоряющих работу программиста.
Spring Boot Starters с предварительно настроенными зависимостями
Одна из особенностей Spring Boot — Spring Boot Starters. Это предварительно настроенные зависимости, облегчающие работу с проектом. В зависимости от задач к приложению можно подключить один или несколько starter-пакетов.
Например, в Spring Boot Starter Web есть инструменты для разработки веб-приложений (Tomcat, Jackson) и для обработки JSON. А Spring Boot Starter Test содержит классы и зависимости для тестирования, такие как Mockito и Spring Boot Test.
Подробное описание Spring Boot Starters с примерами работы можно найти в документации.
Встроенные веб-серверы
Разработчик, пишущий код на Spring Boot, может запускать встроенные веб-серверы: Tomcat, Jetty и Undertow, не тратя время на настройку сторонних серверов. Если же ему по какой-то причине необходимо использовать свой сервер, то для этого достаточно исключить зависимости по умолчанию и выбрать подходящий starter-пакет.
Готовые функции
Как и родительский фреймворк, Spring Boot позволяет работать со встроенными модулями, которые легко интегрируются в приложения, добавляя функциональность и ускоряя разработку. Например:
Spring Data — позволяет работать с различными базами данных;
Spring Boot Actuator — функция для мониторинга и управления созданным приложением.
Все встроенные функции подробно описаны в документации и указаны в левом столбце меню.
Запускаем Spring Boot
Для того чтобы приступить к работе со Spring Boot, нам необходимо создать новый проект и подготовить IDE к работе.
Шаг 1. Создаём новый проект на Spring Boot
Самый простой способ подготовить фреймворк для работы — воспользоваться сайтом start.spring.io. Это конструктор, который позволяет легко задать конфигурацию проекта на Spring Boot.
Откроем сайт:
Скриншот: Spring Boot / Skillbox Media
В левой части экрана указаны различные варианты настройки, включая параметры проекта. Так как мы тестируем возможность запуска Spring Boot, то можем ничего не менять. Обратите внимание, что сайт автоматически предлагает использовать наиболее актуальную версию Spring Boot. На 5 июля это 3.1.1.
В правой части указаны зависимости, которые мы можем использовать в своём проекте. Для работы с веб-приложением требуется нажать на кнопку ADD DEPENDENCIES и добавить пункт Spring Web:
Скриншот: Spring Boot / Skillbox Media
Теперь на экране будет видна добавленная зависимость:
Скриншот: Spring Boot / Skillbox Media
Нажимаем кнопку Generate и скачиваем архив — это шаблон нашего проекта. Он скоро пригодится.
Пока разархивируем его и зайдём в директорию. В ней содержится нескольких файлов:
файл mnvw, который позволяет запустить проект Maven без его установки;
файл pom.xml, содержащий описания всех зависимостей приложения;
каталог java — основной каталог пакетов и классов;
каталог resources, хранящий ресурсы: шаблоны, файлы настроек, локализации и так далее;
application.properties — файл с настройками проекта, размещённый в подпапках шаблона.
Вся последующая работа будет проходить именно в этой директории.
Шаг 2. Запускаем IDE
Для работы со Spring Boot подойдёт любой из популярных редакторов кода, например IntelliJ IDEA или Visual Studio Code.
Мы будем использовать Visual Studio Code. Запустите редактор и создайте новый проект. После этого перейдите в раздел Extensions и в поиске найдите Spring Boot Extension Pack:
Скриншот: Spring Boot / Skillbox Media
Установите его. Теперь в VSC можно будет работать со Spring Boot и создавать веб-приложения.
Теперь в скачанном архиве в директории src/main/java/com/example/demo откройте файл DemoApplication.java:
Скриншот: Spring Boot / Skillbox Media
В этом файле будем писать весь код. По умолчанию он используется в качестве стартовой страницы при запуске сервиса. В нём можем писать код на Java, вставлять элементы из HTML и CSS для оформления страницы.
Мы подготовили наш редактор кода к работе со Spring Boot и создали шаблон проекта. Теперь приступим к созданию веб-приложения.
Создаём первое веб-приложение
Начнём с классического приложения приветствия. Напишем код, который будет создавать веб-страницу с надписью «Привет, читатели Skillbox Media». Для этого заменим код в VSC на новый:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "читатель Skillbox Media") String name) {
return String.format("Hello, %s!", name);
}
}
В начале кода мы импортируем несколько классов и аннотаций, облегчающих работу:
org.springframework.boot.SpringApplication — класс, который часто используется для загрузки и запуска приложений Spring;
org.springframework.boot.autoconfigure.SpringBootApplication — обозначает класс конфигурации, который объявляет один или несколько методов @Bean, а также запускает автоконфигурацию и сканирование компонентов в коде;
org.springframework.web.bind.annotation.GetMapping — аннотация для отображения результатов HTTP-запрос методом GET на определённые методы, функция которых — обрабатывать события;
org.springframework.web.bind.annotation.RequestParam — аннотация, указывающая, что параметр метода должен быть связан с параметром веб-запроса;
org.springframework.web.bind.annotation.RestController — удобная аннотация, которая сама аннотирована @Controller и @ResponseBody.
Аннотация @RestController сообщает Spring, что этот код описывает конечную точку, которая должна быть доступна через веб-интерфейс. Аннотация @GetMapping ("/hello") указывает Spring, что надо использовать указанный ниже метод hello() для ответа на запросы, отправленные на адрес http://localhost:8080/hello.
@RequestParam указывает Spring, что в запросе должно быть значение name, а если его там нет, то нужно использовать по умолчанию строку читатель Skillbox Media.
Метод hello(), который мы добавили, принимает параметр name с типом String, а затем объединяет этот параметр со словом Hello в коде. Это означает, что если вы зададите в запросе имя Иван, то ответом будет Hello, Иван. Имя можно прописать вручную в параметре defaultValue.
Для запуска кода нажмём кнопку Run в нашей IDE. В Visual Studio Code это кнопка Run and Debug:
Скриншот: Spring Boot / Skillbox Media
В терминале IDE появится информация о запуске Spring Boot:
Скриншот: Spring Boot / Skillbox Media
Если код написан неправильно, то вместо этого окна вы увидите информацию об ошибках. Но у нас всё хорошо. Не завершая работу кода в IDE, откроем браузер и перейдём по адресу http://localhost:8080/hello.
На экране наша надпись:
Скриншот: Spring Boot / Skillbox Media
Усложним задачу — попробуем вывести имя читателя вместо обезличенного обращения. Для этого откроем страницу с именем, переданным в качестве параметра name:
http://localhost:8080/hello?name=Anton
Результат:
Скриншот: Spring Boot / Skillbox Media
Всё получилось. Мы видим не общее обращение к читателям, а имя человека.
Что дальше?
Читаем официальную документацию и гайд с практическими примерами. После этого можно приступать к книгам:
«Spring Boot по-быстрому» Майкла Хеклера;
«Spring Boot в действии» Крейга Уоллса;
«Learning Spring Boot 3.0» Грега Тернквиста.