JavaRush /Курсы /Модуль 5. Spring /Структура проекта Spring Boot

Структура проекта Spring Boot

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

Когда вы создаёте проект Spring Boot (например, через Spring Initializr), на выходе вы получаете заранее подготовленную структуру. Это не просто хаотичный набор файлов и папок, это тщательно продуманный шаблон, который упрощает разработку и поддержку. Давайте разберём его компоненты.

Структура проекта

Предположим, мы создали новый проект с именем demo. Вот какую структуру проекта мы увидим:


demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/demo/
│   │   │       └── DemoApplication.java
│   │   ├── resources/
│   │       ├── static/
│   │       ├── templates/
│   │       ├── application.properties
│   │       └── application.yml
│   ├── test/
│       ├── java/
│       │   └── com/example/demo/
│       │       └── DemoApplicationTests.java
│       └── resources/
├── mvnw
├── mvnw.cmd
├── pom.xml
└── README.md

Давайте разберёмся в этом всём.


src/main/java

Скорее всего с этой директорией у вас проблем нет, и вы её узнали: тут хранится основной код вашего приложения. Внутри папки вы найдёте структуру на основании вашего Group и Artifact ID, которые вы указали при создании проекта. Например, если Group ID — com.example и Artifact ID — demo, вы получите директорию com/example/demo.

Основной класс приложения Каждый Spring Boot проект содержит главный класс с аннотацией @SpringBootApplication. В нашем случае — это DemoApplication.java:


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

На самом деле, это не просто "какой-то главный" класс. Этот класс:

  1. Запускает приложение.
  2. Подключает автоконфигурацию через аннотацию @SpringBootApplication.
  3. Выполняет сканирование компонентов (о, привет, @ComponentScan).

Как организовать код внутри src/main/java

Обычно код разделяют на 3 слоя: Controller, Service, Repository.

  • Controller: отвечает за обработку HTTP-запросов.
  • Service: здесь живёт бизнес-логика.
  • Repository: отвечает за взаимодействие с базой данных.

Пример структуры:


src/main/java/com/example/demo/
├── controller/
├── service/
└── repository/

Эта структура, конечно, необязательна, но она — общепринятый стандарт.


src/main/resources

Эта папка предназначена для хранения всех нефункциональных ресурсов вашего приложения. Если у вас есть JSON-файлы, HTML-шаблоны, файлы конфигурации или изображения, они будут жить здесь.

  • static/: сюда помещаются статические ресурсы, такие как файлы CSS, JavaScript, изображения.
  • templates/: эта папка содержит HTML-шаблоны (например, если вы используете Thymeleaf).
  • application.properties или application.yml: это главный файл конфигурации, мы в него уже немного "ныряли" в предыдущих лекциях.

Пример содержимого application.properties:


server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=secret

Обратите внимание: Spring автоматически подхватывает ресурсы из этой папки. Вам не нужно писать дополнительный код для их загрузки — магия Spring делает всё за вас.


src/test/java

Тестирование? Увы, его не избежать! Эта директория — ваш лучший друг для написания юнит-, интеграционных и функциональных тестов.

Пример теста для главного класса приложения:


package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {
    @Test
    void contextLoads() {
    }
}

Spring Boot автоматически конфигурирует среду для тестирования, так что вы всегда можете быть уверены в корректной работе вашего приложения.


Корневые файлы проекта

На верхнем уровне структуры есть несколько важных файлов:

  • pom.xml или build.gradle — инструмент управления зависимостями (Maven или Gradle). Здесь вы подключаете библиотеки, необходимые для работы.
  • mvnw и mvnw.cmd — "wrapper" для Maven. Эти файлы позволяют запускать Maven, даже если он не установлен на вашей машине.
  • README.md — здесь обычно пишут инструкцию по работе с проектом (хотя, честно говоря, мало кто этим пользуется).

Основной класс приложения

@SpringBootApplication — три аннотации в одной

@SpringBootApplication объединяет три аннотации:

  1. @Configuration — позволяет использовать класс как источник конфигурации.
  2. @EnableAutoConfiguration — включает магическую автоконфигурацию Spring Boot.
  3. @ComponentScan — автоматически ищет компоненты, аннотированные как @Component, @Service, @Repository и так далее.

Вот почему, добавляя @SpringBootApplication, вы сразу получаете от Spring Boot всё нужное для запуска приложения.


Файл конфигурации: application.properties или application.yml

Разница между application.properties и application.yml

  • application.properties: традиционный формат ключ-значение.
  • application.yml: более современный способ, поддерживающий вложенные структуры.

Пример application.properties:


server.port=8080
spring.application.name=DemoApplication

Пример application.yml:


server:
  port: 8080
spring:
  application:
    name: DemoApplication

YAML считается более читаемым, особенно для сложных конфигураций.


Теперь у вас есть представление о внутренностях Spring Boot проекта. Как говорится, "не судите проект по внешнему виду папок, пока не заглянете в его src/main/java". А мы двигаемся дальше, чтобы погрузиться ещё глубже в мир Spring Boot!

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