Добро пожаловать в мир Spring Boot! В предыдущих лекциях мы обсудили фундаментальные концепции Spring Framework, узнали, что такое Spring Boot и как он упрощает жизнь Java-разработчикам. Сегодня мы углубимся в практическую часть и совершим свой первый шаг по созданию и запуску Spring Boot-приложения. Готовы? Тогда вперед — к нашим первым строкам кода и горячим запускам серверов!
Структура проекта в Spring Boot — это не просто хаотичная куча директорий. Она создана для того, чтобы организовать ваш код так, чтобы было легко управлять как небольшими скриптами, так и огромными enterprise-системами.
Знание структуры проекта помогает:
- Быстрее находить нужные файлы и настройки.
- Понимать, где что лежит (даже спустя годы работы над проектом).
- Подготовить проект к масштабированию (чтобы добавить ещё одну функциональность было не страшно).
Структура Spring Boot-проекта
Когда вы создаете Spring Boot-проект (например, через Spring Initializr), вам автоматически предоставляют базовую структуру. Вот такую примерно:
my-spring-boot-app/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/demo/
│ │ │ ├── MySpringBootApplication.java // Главный класс приложения
│ │ │ └── controllers/
│ │ │ └── HelloController.java // Наши контроллеры
│ │ ├── resources/
│ │ ├── application.properties // Конфигурации приложения
│ │ └── static/ // Статические ресурсы (CSS, JS и др.)
│ └── test/ // Тесты приложения
├── pom.xml (или build.gradle) // Конфигурация зависимостей Maven/Gradle
Разберем основные элементы:
src/main/java/
Вся ваша бизнес-логика будет находиться здесь. Например, контроллеры, сервисы, репозитории и прочие "умные" классы.src/main/resources/
Тут хранятся конфигурации (например,application.properties), ресурсы (например, статические файлы) и шаблоны для рендера страниц (если используете Thymeleaf).src/test/
Директория для тестов. Мы пока туда лезть не будем, но в будущем это станет нашим лучшим другом.pom.xml или build.gradle
Файл, который отвечает за управление зависимостями вашего проекта. Мы добавляем нужные зависимости, такие, какspring-boot-starter-web, в этом файле.
Главный класс приложения
Главный класс приложения — это отправная точка при запуске Spring Boot-проекта. Обычно этот класс расположен в директории src/main/java и содержит всего лишь несколько строк. Вот пример кода:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
Что здесь происходит?
@SpringBootApplication: эта аннотация объединяет три другие (@Configuration,@EnableAutoConfiguration,@ComponentScan) и говорит Spring Boot: "Эй, это наш главный класс. Начинай с него!".SpringApplication.run(): запускает в дело "Spring Boot magic". Находит все конфигурации, стартует встроенный сервер и начинает слушать входящие запросы.
Где искать наш код? Идеально, когда главный класс находится прямо в корне вашего пакета, например, com.example.demo. Это упрощает автоматическое сканирование всех файлов проекта. Если вы решите спрятать главный класс глубже, вам может понадобиться вручную настраивать сканирование компонентов (спойлер: не делайте так без особой надобности).
Роль файла application.properties
Если главный класс — это сердце вашего приложения, то application.properties (или его YAML-версия — application.yml) — его мозг. Здесь мы определяем конфигурации, такие как порт, настройки базы данных, логирование и многое другое.
Пример настройки файла application.properties:
# Порт сервера
server.port=8081
# Логирование
logging.level.org.springframework=DEBUG
logging.level.com.example=TRACE
Запустите приложение, и оно будет слушать запросы на порту 8081 вместо стандартного 8080! Если вы хотите YAML-версию, вот как она будет выглядеть:
server:
port: 8081
logging:
level:
org.springframework: DEBUG
com.example: TRACE
Запуск приложения
Spring Boot предоставляет невероятный комфорт с точки зрения запуска. Вот как это делается:
Запуск из IDE
- Откройте ваш проект в IntelliJ IDEA (или другой IDE).
- Найдите главный класс приложения.
- Щелкните на зеленую кнопку "Run" рядом с методом
main.
- Запуск через терминал. Выполните следующую команду:
или
./mvnw spring-boot:run./gradlew bootRun - Создание jar-файла. Соберите jar-файл для вашего приложения:
./mvnw clean packageПосле этого запустите jar-файл:
java -jar target/my-app-0.0.1-SNAPSHOT.jar
Проверка работы
Теперь откройте браузер и введите:
http://localhost:8080/hello
Если вы видите ваше сообщение "Hello, World", значит, всё работает как надо! Ура!
Практика
Давайте создадим простейшее приложение, которое возвращает приветствие. Используем контроллер для обработки запроса.
Рассмотрим код контроллера:
package com.example.demo.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World from Spring Boot!";
}
}
Что здесь происходит?
@RestController: говорит Spring, что этот класс будет обрабатывать HTTP-запросы.@GetMapping: означает, что метод будет обрабатывать запросы типа HTTP GET по адресу/hello.- String-ответ: возвращаем простое текстовое приветствие клиенту.
Проверим ответ
Откройте браузер или Postman, обратитесь к http://localhost:8080/hello и наслаждайтесь своим первым Spring Boot-контроллером!
Распространенные ошибки при запуске
Spring Boot делает многое за вас, но иногда возникают ошибки. Вот несколько типичных проблем и их решений:
- Порт уже занят
При запуске вы видите сообщениеPort 8080 is already in use. Это значит, что кто-то уже "захватил" порт. Попробуйте сменить порт вapplication.properties:server.port=8081 - Неправильная структура пакетов
Если главный класс приложения (с аннотацией@SpringBootApplication) находится не в корне пакета, это может вызвать проблемы со сканированием компонентов. - Ошибка автоконфигурации
Если вы забыли подключить нужный "стартер" (например,spring-boot-starter-web), приложение не сможет обработать запросы. Проверьте вашpom.xmlилиbuild.gradle.
На этом этапе вы уже готовы создавать и запускать Spring Boot-приложения. В следующей лекции мы поговорим о жизненном цикле бинов и узнаем, как Spring управляет нашими объектами изнутри. Кто сказал, что магия — это сложно? 😉
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ