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

Лекція 173: Практика: створення мікросервісів з використанням Spring Boot

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

Сьогодні переходимо до найцікавішого: практики. У цій лекції ми створимо простий мікросервіс із використанням Spring Boot.


Частина 1: Підготовка середовища й інструментів

Спочатку підготуємо середовище для нашого мікросервісу. Для цього використаємо Spring Initializr, щоб швидко згенерувати стартовий проєкт.

Крок 1: Створення проєкту через Spring Initializr

Заходимо на Spring Initializr і вибираємо параметри проєкту:

  • Project: Maven (або Gradle, якщо ти фанат).
  • Spring Boot Version: обирай актуальну версію (наприклад, 3.0.0+).
  • Dependencies:
    • Spring Web — для створення REST API.
    • Spring Data JPA — для роботи з базою даних.
    • H2 Database — для простої вбудованої бази даних (в реальному проєкті ти можеш замінити її на MySQL, PostgreSQL тощо).

Заповнюємо решту параметрів проєкту, наприклад:

  • Group: com.example
  • Artifact: orderservice
  • Name: OrderService

Потім натискаємо "Generate", завантажуємо архів і розпаковуємо його.

Крок 2: Імпорт проєкту в IDE

Імпортуємо проєкт у улюблену IDE (наприклад, IntelliJ IDEA або Eclipse). Потім відкриваємо файл pom.xml і переконуємося, що всі залежності підтягнулися коректно. Якщо ти використовуєш Gradle, перевір файл build.gradle.


Частина 2: Розробка простого мікросервісу

Ми створимо мікросервіс для керування замовленнями (OrderService). Наш мікросервіс надаватиме REST API для виконання CRUD-операцій з сутністю Order.

Крок 1: Налаштування сутностей і бази даних

Сутність Order

Створюємо пакет com.example.orderservice.model, а потім клас Order:


package com.example.orderservice.model;

import jakarta.persistence.*;
import java.time.LocalDateTime;

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String product;

    private Integer quantity;

    private Double price;

    private LocalDateTime orderDate;

    // Getters and Setters...

    // Конструктор без аргументів
    public Order() {}

    // Конструктор з параметрами
    public Order(String product, Integer quantity, Double price, LocalDateTime orderDate) {
        this.product = product;
        this.quantity = quantity;
        this.price = price;
        this.orderDate = orderDate;
    }
}
Примітка: якщо ти забудеш додати анотацію @Entity, JPA ввічливо проігнорує твій клас, і база даних навіть не дізнається про його існування.

Конфігурація бази даних

У файлі application.properties (або application.yml) додай конфігурацію для H2:

spring.datasource.url=jdbc:h2:mem:ordersdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update

Тепер у нас є вбудована база даних, і ми можемо взаємодіяти з нею через JPA.

Крок 2: Створення репозиторію

Додаємо інтерфейс репозиторію для роботи з нашою сутністю.

Створи пакет com.example.orderservice.repository і в ньому інтерфейс OrderRepository:


package com.example.orderservice.repository;

import com.example.orderservice.model.Order;
import org.springframework.data.jpa.repository.JpaRepository;

public interface OrderRepository extends JpaRepository<Order, Long> {
}

За допомогою цього інтерфейсу отримуємо всі стандартні CRUD-операції.

Крок 3: Реалізація бізнес-логіки (сервісний шар)

Додаємо клас сервісу. Створи пакет com.example.orderservice.service і клас OrderService:


package com.example.orderservice.service;

import com.example.orderservice.model.Order;
import com.example.orderservice.repository.OrderRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class OrderService {

    private final OrderRepository orderRepository;

    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    public List<Order> getAllOrders() {
        return orderRepository.findAll();
    }

    public Order getOrderById(Long id) {
        return orderRepository.findById(id).orElseThrow(() -> new RuntimeException("Order not found"));
    }

    public Order createOrder(Order order) {
        return orderRepository.save(order);
    }

    public Order updateOrder(Long id, Order updatedOrder) {
        Order order = getOrderById(id);
        order.setProduct(updatedOrder.getProduct());
        order.setQuantity(updatedOrder.getQuantity());
        order.setPrice(updatedOrder.getPrice());
        return orderRepository.save(order);
    }

    public void deleteOrder(Long id) {
        orderRepository.deleteById(id);
    }
}

Крок 4: Реалізація REST API (контролер)

Тепер зробимо REST API. Створи пакет com.example.orderservice.controller і клас OrderController:


package com.example.orderservice.controller;

import com.example.orderservice.model.Order;
import com.example.orderservice.service.OrderService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/orders")
public class OrderController {

    private final OrderService orderService;

    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }

    @GetMapping
    public List<Order> getAllOrders() {
        return orderService.getAllOrders();
    }

    @GetMapping("/{id}")
    public ResponseEntity<Order> getOrderById(@PathVariable Long id) {
        return ResponseEntity.ok(orderService.getOrderById(id));
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public Order createOrder(@RequestBody Order order) {
        return orderService.createOrder(order);
    }

    @PutMapping("/{id}")
    public Order updateOrder(@PathVariable Long id, @RequestBody Order order) {
        return orderService.updateOrder(id, order);
    }

    @DeleteMapping("/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void deleteOrder(@PathVariable Long id) {
        orderService.deleteOrder(id);
    }
}

Частина 3: Тестування та налагодження

Крок 1: Запусти застосунок

Запускаємо OrderServiceApplication — головний клас нашого мікросервісу:


package com.example.orderservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }
}

Якщо все зроблено правильно, застосунок запуститься на порті 8080.

Крок 2: Тестування за допомогою Postman або curl

Приклади запитів:

  • GET /api/orders — отримати всі замовлення.
  • POST /api/orders з тілом:

{
    "product": "Laptop",
    "quantity": 2,
    "price": 1200.00,
    "orderDate": "2023-10-01T10:00:00"
}
  • PUT /api/orders/1 — для оновлення існуючого замовлення.
  • DELETE /api/orders/1 — для видалення замовлення.

Частина 4: Що далі?

Вітаю! Ми створили базовий мікросервіс для керування замовленнями. Цей простий приклад можна розширити, додавши такі фічі, як валідація вхідних даних, обробка помилок, аутентифікація, або інтеграція з Kafka для подієво-орієнтованої архітектури. Усе це попереду!

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