JavaRush /Курсы /Модуль 5. Spring /Запуск первого приложения Spring Boot, структура проекта

Запуск первого приложения Spring Boot, структура проекта

Модуль 5. Spring
1 уровень , 8 лекция
Открыта

Добро пожаловать в мир Spring Boot! В предыдущих лекциях мы обсудили фундаментальные концепции Spring Framework, узнали, что такое Spring Boot и как он упрощает жизнь Java-разработчикам. Сегодня мы углубимся в практическую часть и совершим свой первый шаг по созданию и запуску Spring Boot-приложения. Готовы? Тогда вперед — к нашим первым строкам кода и горячим запускам серверов!

Структура проекта в Spring Boot — это не просто хаотичная куча директорий. Она создана для того, чтобы организовать ваш код так, чтобы было легко управлять как небольшими скриптами, так и огромными enterprise-системами.

Знание структуры проекта помогает:

  1. Быстрее находить нужные файлы и настройки.
  2. Понимать, где что лежит (даже спустя годы работы над проектом).
  3. Подготовить проект к масштабированию (чтобы добавить ещё одну функциональность было не страшно).

Структура 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

Разберем основные элементы:

  1. src/main/java/
    Вся ваша бизнес-логика будет находиться здесь. Например, контроллеры, сервисы, репозитории и прочие "умные" классы.

  2. src/main/resources/
    Тут хранятся конфигурации (например, application.properties), ресурсы (например, статические файлы) и шаблоны для рендера страниц (если используете Thymeleaf).

  3. src/test/
    Директория для тестов. Мы пока туда лезть не будем, но в будущем это станет нашим лучшим другом.

  4. 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 предоставляет невероятный комфорт с точки зрения запуска. Вот как это делается:

  1. Запуск из IDE

    • Откройте ваш проект в IntelliJ IDEA (или другой IDE).
    • Найдите главный класс приложения.
    • Щелкните на зеленую кнопку "Run" рядом с методом main.
  2. Запуск через терминал. Выполните следующую команду:
    
    ./mvnw spring-boot:run
    
    или
    
    ./gradlew bootRun
    
  3. Создание 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!";
    }
}

Что здесь происходит?

  1. @RestController: говорит Spring, что этот класс будет обрабатывать HTTP-запросы.
  2. @GetMapping: означает, что метод будет обрабатывать запросы типа HTTP GET по адресу /hello.
  3. String-ответ: возвращаем простое текстовое приветствие клиенту.

Проверим ответ

Откройте браузер или Postman, обратитесь к http://localhost:8080/hello и наслаждайтесь своим первым Spring Boot-контроллером!


Распространенные ошибки при запуске

Spring Boot делает многое за вас, но иногда возникают ошибки. Вот несколько типичных проблем и их решений:

  1. Порт уже занят
    При запуске вы видите сообщение Port 8080 is already in use. Это значит, что кто-то уже "захватил" порт. Попробуйте сменить порт в application.properties:
    
    server.port=8081
    
  2. Неправильная структура пакетов
    Если главный класс приложения (с аннотацией @SpringBootApplication) находится не в корне пакета, это может вызвать проблемы со сканированием компонентов.
  3. Ошибка автоконфигурации
    Если вы забыли подключить нужный "стартер" (например, spring-boot-starter-web), приложение не сможет обработать запросы. Проверьте ваш pom.xml или build.gradle.

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

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ