JavaRush /Курсы /Модуль 5. Spring /Лекция 171: Использование Spring Boot для создания микрос...

Лекция 171: Использование Spring Boot для создания микросервисов

Модуль 5. Spring
18 уровень , 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.
  • Широкой поддержке интеграций: работа с базами данных, месседж брокерами (например, 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 помогает быстро разработать функциональный микросервис.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ