Один із ключових принципів Spring Boot — це "convention over configuration" (погодження важливіші за конфігурацію). Spring Boot пропонує потужний механізм автоконфігурації: він дозволяє уникнути більшої частини рутинових налаштувань і сфокусуватися на бізнес-логіці мікросервісу.
Уявіть, що ви додаєте в проєкт залежність для роботи з базою даних — spring-boot-starter-data-jpa. Spring Boot автоматично визначить наявність цієї залежності і налаштує усі необхідні компоненти: пул з'єднань, Hibernate як JPA-провайдер, транзакції.
І це тільки один приклад з багатьох автоматичних конфігурацій, які Spring Boot надає "з коробки".
У цій лекції ми детально розберемо, як працює механізм автоконфігурації, коли його використовувати, і як за потреби налаштувати його під свої задачі.
Як це працює "під капотом"
Автоконфігурація побудована на анотації @EnableAutoConfiguration, яку Spring Boot активно використовує за лаштунками.
@SpringBootApplication
public class MyMicroserviceApplication {
public static void main(String[] args) {
SpringApplication.run(MyMicroserviceApplication.class, args);
}
}
Анотація @SpringBootApplication включає в себе @EnableAutoConfiguration. Це означає, що Spring Boot просканує всі доступні автоконфігурації і застосує ті, які підходять під залежності у вашому classpath.
Принцип "Opinionated Configuration" (Конфігурація за замовчуванням)
У Spring Boot є своя думка про те, як все повинно працювати. Розробники часто кажуть про це так: "strong opinions, but weakly held" — чітка позиція, але з готовністю до компромісів. Це означає два простих правила:
- Spring Boot пропонує розумні налаштування за замовчуванням одразу після встановлення
- Ви можете легко змінити будь-яку настройку під свої потреби
Давайте подивимось на прикладі. Коли ви додаєте spring-boot-starter-web, Spring Boot сам налаштує:
- Вбудований сервер (Tomcat, Jetty або Undertow)
- HTTP-порти
- Всі потрібні біні для REST API
І ваш додаток одразу готовий до роботи! Але якщо захочете змінити налаштування Tomcat — без проблем, Spring Boot не стане перешкоджати.
Для чого потрібна автоконфігурація в мікросервісах
Автоконфігурація особливо корисна при розробці мікросервісної архітектури, де кожен сервіс має мінімальний набір задач:
- Обробляти REST API-запити.
- Зберігати дані.
- Забезпечувати моніторинг і логування.
За допомогою автоконфігурації можна позбутися рутини. Наприклад:
- Налаштування бази даних.
- Налаштування брокера повідомлень, наприклад Kafka.
- Увімкнення моніторингу (Spring Boot Actuator).
- Налаштування кешів, безпеки і управління транзакціями.
Таким чином, ви можете зосередитися на розробці функціоналу вашого мікросервісу, а про решту подбає Spring Boot.
Як вимкнути автоконфігурацію?
Звісно, автоматизація — це круто, але іноді хочеться повного контролю. Наприклад, якщо ви не хочете, щоб Spring Boot автоматично конфігурував Hibernate, ви можете виключити цей компонент з автоконфігурації.
Використовуйте анотацію @SpringBootApplication з параметром exclude:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyMicroserviceApplication {
public static void main(String[] args) {
SpringApplication.run(MyMicroserviceApplication.class, args);
}
}
Або, якщо потрібно вимкнути конфігурацію лише частково:
@SpringBootApplication
public class MyMicroserviceApplication {
public static void main(String[] args) {
SpringApplication.run(MyMicroserviceApplication.class, args);
}
@Bean
public SomeSpecificBean customBean() {
return new SomeSpecificBean();
}
}
Налаштування автоконфігурації під себе
Ви можете перевизначати дефолтні налаштування автоконфігурації через файли application.yml або application.properties.
Наприклад, налаштування бази даних:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: user
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
Налаштування вбудованого сервера:
server:
port: 8081
servlet:
context-path: /api
Налаштування логування:
logging:
level:
org.springframework: DEBUG
Практика: Створення мікросервісу з використанням автоконфігурації
Крок 1: Створення нового проєкту через Spring Initializr
- Виберіть опції:
- Maven або Gradle.
- Java 11 або 17.
- Dependencies: Spring Web, Spring Data JPA, H2 Database (або PostgreSQL/MySQL).
- Скачайте проєкт і відкрийте його у вашій IDE.
Крок 2: Налаштування application.yml
Створіть файл application.yml в папці src/main/resources і додайте мінімальні налаштування для H2 Database:
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: update
show-sql: true
server:
port: 8080
Крок 3: Створення сутності і репозиторію
Додайте сутність, наприклад, Product:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@Entity
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
private double price;
// Геттери і сеттери
}
І репозиторій:
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {}
Крок 4: Реалізація REST API
Створіть контролер для роботи з продуктами:
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/products")
public class ProductController {
private final ProductRepository productRepository;
public ProductController(ProductRepository productRepository) {
this.productRepository = productRepository;
}
@GetMapping
public List<Product> getAllProducts() {
return productRepository.findAll();
}
@PostMapping
public Product createProduct(@RequestBody Product product) {
return productRepository.save(product);
}
}
Крок 5: Запустіть додаток
Запустіть ваш мікросервіс і протестуйте ендпоїнти за допомогою Postman або curl. На цьому етапі ви вже користуєтесь автоконфігурацією для бази даних, JPA і REST API.
Рекомендації щодо використання автоконфігурації
- Не намагайтесь ускладнювати: автоконфігурація покриває 90% типових кейсів, тож не варто витрачати час на те, щоб "перемогти" Spring.
- Уникайте дублювання: ручне налаштування в коді і налаштування через
application.ymlможуть конфліктувати. Виберіть один спосіб. - Уважно читайте документацію: кожен
spring-boot-starterйде з детальним описом, що саме він конфігурує.
Детальніше про автоконфігурацію можна дізнатися в офіційній документації Spring Boot.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ