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

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

Відкрита

Коли ви створюєте проєкт 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!

Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.