1. Инициализация проекта Spring Boot, архитектура приложения и создание первого REST контроллера
Введение в курс: Java Spring от идеи до деплоя
Добро пожаловать на курс, который превратит вас из теоретика в практика. Мы не будем изучать абстрактные концепции в вакууме. Вместо этого мы пройдем путь создания реального продукта — системы управления задачами (Task Tracker). Мы начнем с пустой папки и закончим работающим приложением, развернутым в облаке Yandex Cloud.
В этой первой статье мы заложим фундамент: создадим каркас приложения, разберемся с его структурой и научим наш сервер отвечать на первое приветствие.
Что такое Spring Boot и зачем он нам?
Представьте, что вы хотите построить дом. Вы можете начать с производства кирпичей, замешивания цемента и выпиливания досок (это чистая Java). А можете заказать готовые модули, нанять бригаду и получить ключи через месяц. Spring Framework — это этот набор модулей и инструментов.
Однако «чистый» Spring требует много ручной настройки. Вам нужно объяснять системе каждый шаг: как подключаться к базе данных, как обрабатывать веб-запросы и так далее. Здесь на сцену выходит Spring Boot.
Spring Boot — это расширение фреймворка Spring, которое следует философии Convention over Configuration (соглашение важнее конфигурации). Он говорит: «Я вижу, ты подключил библиотеку для работы с вебом. Наверное, тебе нужен веб-сервер? Я запущу его для тебя на порту 8080. Не благодари».
> Spring Boot делает разработку на Java быстрой, убирая необходимость писать сотни строк шаблонного кода настройки.
Шаг 1: Инициализация проекта (Spring Initializr)
Самый простой способ начать — использовать Spring Initializr. Это веб-инструмент, который генерирует архив с готовой структурой проекта.
!Скриншот конфигуратора Spring Initializr с выбранными настройками для создания веб-проекта
Инструкция по созданию:
ru.yandex.tracker (или ваш домен в обратном порядке).
* Artifact: task-tracker (название нашего приложения).
* Name: task-tracker.
* Package name: сформируется автоматически.
* Packaging: Jar.
* Java: 17 или 21 (в зависимости от того, какая версия установлена у вас, но 17 — золотой стандарт LTS).
Распакуйте архив в удобную папку и откройте её через вашу IDE (IntelliJ IDEA, Eclipse или VS Code).
Шаг 2: Структура проекта и точка входа
Когда вы откроете проект, вы увидите стандартную структуру Maven-проекта. Давайте разберем, что здесь важно.
Основные файлы и папки
* pom.xml: Это «паспорт» вашего проекта. Здесь описано, как называется приложение, какая версия Java используется и какие библиотеки (dependencies) подключены. Если вы захотите добавить базу данных позже, вы пропишете её именно сюда.
* src/main/java: Здесь живет весь ваш исходный код.
* src/main/resources: Место для конфигураций (например, настройки подключения к БД) и статических файлов.
* src/test/java: Папка для тестов.
Класс Application
Найдите файл TaskTrackerApplication.java (название зависит от того, что вы ввели в поле Artifact). Он выглядит примерно так:
Это сердце вашего приложения. Аннотация @SpringBootApplication — это магический маркер. Она говорит Spring Boot: «Это главное приложение. Пожалуйста, просканируй все файлы в этой папке и подпапках, найди настройки и запусти всё, что нужно».
Метод main запускает встроенный веб-сервер Tomcat. Вам не нужно устанавливать сервер отдельно — он уже внутри вашего .jar файла.
Архитектура приложения: Слои
Прежде чем писать код, давайте договоримся, куда мы будем его писать. Новички часто пишут всю логику прямо в контроллере или вообще в одном классе. Это плохая практика. В профессиональной разработке используется слоистая архитектура.
!Диаграмма, показывающая поток данных от клиента через контроллер, сервис и репозиторий к базе данных
Мы будем придерживаться следующего разделения:
В этой статье мы создадим только первый слой — Controller, чтобы проверить работоспособность системы.
Шаг 3: Создание первого REST контроллера
Давайте создадим простую «ручку» (endpoint), которая будет приветствовать нас. В терминологии REST это будет GET-запрос.
TaskTrackerApplication.java, создайте новый пакет (папку) с названием controller.HelloController.Напишем следующий код:
Разбор кода
* @RestController: Эта аннотация говорит Spring, что данный класс — это веб-контроллер, и ответы его методов должны быть записаны прямо в тело HTTP-ответа (обычно в формате JSON или простого текста), а не рендерить HTML-страницу.
* @GetMapping("/hello"): Мы связываем URL-адрес /hello с методом sayHello. Когда на сервер придет GET-запрос по этому адресу, выполнится этот метод.
* @RequestParam: Эта аннотация позволяет извлекать параметры из строки запроса (например, ?name=Ivan). Если параметр не передан, используется значение по умолчанию (`defaultValue =