JavaRush /Курси /Модуль 5. Spring /Лекція 171: Використання Spring Boot для створення мікрос...

Лекція 171: Використання Spring Boot для створення мікросервісів

Модуль 5. Spring
Рівень 12 , Лекція 0
Відкрита

Ми вже створили найпростіші застосунки з використанням 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);
    }
}

Тут ми створили три ендпоінти:

  1. GET /customers: отримати всіх клієнтів.
  2. POST /customers: створити нового клієнта.
  3. DELETE /customers/{id}: видалити клієнта.

Запуск та тестування

  1. Налаштування бази даних
    Додайте в 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
    
  2. Запуск застосунку
    Запустіть клас CustomerServiceApplication (він містить метод main). Застосунок стартує на http://localhost:8080.
  3. Тестування 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 допомагає швидко розробити функціональний мікросервіс.

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