Мы уже создали простейшие приложения с использованием 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);
}
}
Здесь мы создали три эндпоинта:
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 помогает быстро разработать функциональный микросервис.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ