Ми вже створили найпростіші застосунки з використанням Spring Boot, розібралися в структурі проєкту Spring Boot, його автоконфігурації та способах конфігурування через application.properties і application.yml. Тепер ми готові зробити наступний крок і застосувати Spring Boot для створення мікросервісів.
Spring Boot вирішує проблеми
Перш ніж зануритися в практику, давайте розберемося, чому Spring Boot настільки популярний для розробки мікросервісів. Якщо ви колись страждали від нескінченних XML-конфігурацій у старих Spring-застосунках або витрачали години на пошук потрібної версії залежності, ви точно оціните переваги Spring Boot у контексті мікросервісної архітектури.
Спрощення розробки та конфігурування
Spring Boot надає потужні інструменти для полегшення розробки:
- Автоконфігурація: більшість потрібних налаштувань виконується автоматично, що значно скорочує час на "збірку" застосунку.
- Spring Boot Starters: це набори попередньо налаштованих залежностей для реалізації різних функцій. Наприклад,
spring-boot-starter-webдодає все, що потрібно для REST API, аspring-boot-starter-data-jpa— для роботи з базами даних. - Вбудовані веб-сервери: Tomcat, Jetty або Undertow, які звільняють вас від потреби розгортати зовнішній сервер.
Підтримка мікросервісної архітектури
У мікросервісах важливі ізоляція, модульність, легкість масштабування та здатність швидко додавати нові компоненти. Spring Boot робить це простіше завдяки:
- Концепції "opinionated configuration": Spring Boot пропонує готові рішення та налаштування, які працюють "з коробки".
- Сумісності з екосистемами DevOps: наприклад, інтеграції з Docker або Kubernetes.
- Широкій підтримці інтеграцій: робота з базами даних, message broker-ами (наприклад, Kafka), централізованим конфігуруванням та іншими аспектами мікросервісів.
Перший мікросервісний застосунок з Spring Boot
Тепер, коли ми знаємо, навіщо використовувати Spring Boot для мікросервісів, давайте створимо наш перший застосунок. Наприклад, нехай це буде сервіс управління клієнтами (CustomerService), що надає CRUD-функціонал.
Підготовка проєкту
1. Створення проєкту через Spring Initializr
Відкрийте Spring Initializr і налаштуйте:
Project: Maven або Gradle (обирайте те, що вам комфортніше).Dependencies: додайтеSpring WebіSpring Data JPA.Language: Java.Packaging: Jar.Java Version: 17 (або вашу поточну версію).
Потім завантажте проєкт і відкрийте його у вашій улюбленій IDE (наприклад, IntelliJ IDEA або Eclipse).
2. Структура проєкту
Після відкриття проєкту ви побачите базову структуру:
src/main/java
└── com.example.customerservice
├── CustomerServiceApplication.java
└── ... (тут будуть ваші класи)
src/main/resources
├── application.properties
└── ... (файли ресурсів)
У директорії src/main/java ми будемо писати код, а в application.properties — конфігурації.
Реалізація CustomerService
1. Модель даних: клас Customer
Створіть сутність Customer, яка буде представляти клієнта.
package com.example.customerservice.model;
import jakarta.persistence.*;
@Entity // Вказує, що це JPA-Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Гетери і сетери
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Ми використали анотації JPA:
@Entityперетворює клас у сутність бази даних.@Idі@GeneratedValueмаркують полеidяк первинний ключ з автогенерацією.
2. Репозиторій: CustomerRepository
Створіть інтерфейс для доступу до даних.
package com.example.customerservice.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.customerservice.model.Customer;
public interface CustomerRepository extends JpaRepository<Customer, Long> {
}
Spring Data JPA автоматично згенерує всі методи для роботи з базою даних (наприклад, save, findAll, deleteById).
3. Контролер: CustomerController
Створіть REST API для управління клієнтами.
package com.example.customerservice.controller;
import com.example.customerservice.model.Customer;
import com.example.customerservice.repository.CustomerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/customers")
public class CustomerController {
@Autowired
private CustomerRepository customerRepository;
@GetMapping
public List<Customer> getAllCustomers() {
return customerRepository.findAll();
}
@PostMapping
public Customer createCustomer(@RequestBody Customer customer) {
return customerRepository.save(customer);
}
@DeleteMapping("/{id}")
public void deleteCustomer(@PathVariable Long id) {
customerRepository.deleteById(id);
}
}
Тут ми створили три ендпоінти:
GET /customers: отримати всіх клієнтів.POST /customers: створити нового клієнта.DELETE /customers/{id}: видалити клієнта.
Запуск та тестування
- Налаштування бази даних
Додайте вapplication.propertiesналаштування для H2 (вбудованої бази даних, щоб не ускладнювати на початковому етапі):spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect - Запуск застосунку
Запустіть класCustomerServiceApplication(він містить методmain). Застосунок стартує на http://localhost:8080. - Тестування API
Використовуйте Postman або cURL:
- Отримати клієнтів:
curl -X GET http://localhost:8080/customers - Створити клієнта:
curl -X POST http://localhost:8080/customers -H "Content-Type: application/json" -d '{"name":"John Doe","email":"john.doe@example.com"}'
Фішки Spring Boot для мікросервісів
Тепер у нас є робочий мікросервіс! Але Spring Boot пропонує ще багато крутих можливостей:
- Легке масштабування: кожен мікросервіс — це незалежний застосунок, який можна запускати окремо.
- Легкість інтеграції з Kafka, API Gateway та іншими інструментами (ми розбиратимемо це в наступних лекціях).
- Зручна конфігурація через
application.yml: теми багатопрофільних конфігурацій та управління оточеннями висвітлюються в наступних лекціях.
На цьому етапі у нас є базове уявлення про те, як Spring Boot допомагає швидко розробити функціональний мікросервіс.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ