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!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ