Spring Boot
Проработать
- Введение в Spring Boot
- Учебник Thymeleaf: Глава 1. Знакомство
- Руководство: Thymeleaf + Spring. Часть 1
- Spring Boot Roadmap - How To Master Spring Boot
- Spring Boot
- Spring Boot: от начала до продакшена
- Введение в Spring Boot: создание простого REST API на Java
- Spring Boot, React.js & AWS S3 Full Stack Development
- Евгений Борисов, Кирилл Толкачев — Boot yourself, Spring is coming (Часть 1)
- Евгений Борисов — Spring – Глубоко и не очень
- Пишем Java веб-приложение на современном стеке. С нуля до микросервисной архитектуры. Часть 1
- Spring Boot с НУЛЯ - Курс для НАЧИНАЮЩИХ с ПРАКТИКОЙ [2023]
- Spring Tips: Spring Boot 3.2
- Spring Boot стартеры
- Видеоуикенд #70. Создаем собственный Spring Boot Starter, смотрим тестовое собеседование Junior Java-разработчика, узнаем различия между монолит и легаси кодом, и оцениваем шансы фрилансеров глазами заказчика
- Два SpringBoot проекта за час: Web и Reactive.
- Spring Boot Microservice Project Full Course in 6 Hours
- Spring Boot | Exploring Asynchronous 🚀 Calls with @Async Annotation | JavaTechie
- Туториал kafka + springboot + docker
- Синхронная Kafka, не используй Spring Security, ООП — зло | Spring АйО Подкаст №30
- Spring Boot + Redis + Docker: Ultimate Guide to Caching in Java
- Spring Boot CRUD Tutorial with Spring MVC, Spring Data JPA, ThymeLeaf, Hibernate, MySQL
- Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana
- Spring Boot Best Practices for Developers
Что это
Spring Boot - расширение Spring, используемым для создания приложений на основе микросервисов.
Как оно работает:
Автоконфигурация(Страртеры)
Автоконфигурация - автоматически настраивает приложение Spring на основе ранее добавленных зависимостей.
Например, при выборе одного из стартеров.
Зависимости Opinionated
Opinionated означает, что Spring Boot самостоятельно определяет набор настроенных bean-компонентов по умолчанию,
которые вы можете переопределить при необходимости. Более того, этот фреймворк выбирает пакеты для установки с
учетом необходимых вам зависимостей. Таким образом, разработчики Spring Boot сразу же начинают создавать свои
приложения, уделяя больше внимания бизнес-логике, поскольку большая часть работы выполняется самим фреймворком.
Встроенные серверы
Встроенный сервер - это часть приложения. Это означает, что вам не нужно предварительно устанавливать его в
среде развертывания. Spring Boot по умолчанию предлагает встроенный сервер Tomcat, но вы можете изменить его
на Jetty или Undertow.
Работа в автономном режиме
Spring Boot позволяет разработчикам настраивать и запускать автономные приложения Spring производственного
уровня без их развертывания на веб-сервере. Чтобы запустить обычное Java-приложение, его необходимо упаковать,
выбрать, загрузить и настроить веб-сервер, а также организовать процесс развертывания. Java-приложение,
созданное в Spring Boot, нуждается только в упаковке, после чего оно готово к запуску с использованием
простых команд.
Версионирование(BOM)
Совместимость по версиям. Указываем одну версию, остальное подберет Spring Boot.
Spring Boot Actuator
Spring Boot Actuator - это модуль (библиотека) добавляет к вашему приложению готовые инструменты для
мониторинга и управления.
Преимущества Spring Boot
- @SpringBootApplication - аннотация для упрощенной конфигурации Spring Application. Включает в себя:
@Configuration, @ComponentScan, @EnableAutoConfiguration, @EnableTransactionManagement. Имеет метод
exclude - чтобы отключить определённые классы автоконфигурации, если есть своя конфигурация, которая
конфликтует со стандартной.
- Быстрая и легкая разработка приложений на основе Spring.
- Автоконфигурация всех компонентов для приложения Spring производственного уровня.
- Готовые встроенные серверы (Tomcat, Jetty и Undertow), обеспечивающие ускоренное и более продуктивное
развертывание приложений. По умолчанию Tomcat.
- HTTP end-points, позволяющие вводить внутренние функции приложения, такие как показатели, состояние
здоровья и другие.
- Отсутствие конфигурации XML.
- Огромный выбор плагинов, облегчающих работу разработчиков со встроенными базами данных и базами данных в
памяти.
- Легкий доступ к базам данных и службам очередей, таким как MySQL, Oracle, MongoDB, Redis, ActiveMQ и
другим.
Недостатки Spring Boot
- Отсутствие контроля. Spring Boot создает множество неиспользуемых зависимостей, что приводит к большому
размеру файла развертывания.
- Spring Boot не подходит для создания монолитных приложений. Ориентирован на Микросервисы.
Модули
- spring-boot-starter-mail - для работы с почтой. Гайд настройки GMAIL - https://www.youtube.com/watch?v=IWxwWFTlTUQ.
Гайды
Front parts:
- Работа с jsp
- Thymeleaf - замена JSP в приложениях Spring MVC. Способный обрабатывать HTML, XML, JavaScript, CSS
и даже простой текст.
Cache
@Schedule
DataBase connectors:
- Jdbc api
- JdbcTemplate(Spring JDBC)
- Hibernate
- MyBatis
- Spring Data JPA and CrudRepository or PagingAndSortingRepository
DataBase managers:
- Liquibase
- Flyway
Инициализация DB
Помещаем SQL файлы в 'resources'
Или указываем путь property. Пример для 'resources/jdbc'
## jdbc schema creation
spring.sql.init.schema-locations=classpath:jdbc/schema.sql
## jdbc test data
spring.sql.init.data-locations=classpath:jdbc/test-data.sql
Spring profile
Профили Spring позволяют кастомизировать приложение для работы в различном окружении.
В зависимости от активного профиля можно:
- Использовать различные реализации одного и того же bean.
- Присваивать различные значения свойствам(properties) приложения.
Реализации bean
Если Spring-бин имеет аннотацию @Profile, он будет инстанциирован только если указанный в аннотации профиль
соответствует какому-либо активному профилю.
Пример:
public interface SomeService {
String NAME = "demo_SomeService";
String hello(String input);
}
@Service(SomeService.NAME)
@Profile("dev")
public class SomeDevServiceBean implements SomeService {
@Override
public String hello(String input) {
return "Service stub: hello " + input;
}
}
@Service(SomeService.NAME)
@Profile("prod")
public class SomeProdServiceBean implements SomeService {
@Override
public String hello(String input) {
return "Real service: hello " + input;
}
}
Properties
Для того чтобы определить некоторые специфичные для профиля свойства приложения, создайте файл
application-имя_профиля.properties в том же пакете, что и основной файл application.properties. Специфичный для профиля
файл будет загружен сразу после базового файла, поэтому объявленные в нем свойства переопределят свойства,
заданные в базовом файле.
Пример:
com/company/demo/application.properties
com/company/demo/application-prod.properties
Для запуска определенного profile через Idea, необходимо добавить в VM option -Dspring.profiles.active=имя_профиля
Пример
-Dspring.profiles.active=prod
Testcontainers
Testcontainers - фреймворк интегрированный в Spring boot, который используется для запуска окружения
интеграционных тестов в контейнерах Docker.
Spring Boot Actuator
Можно связать с мониторингом например Prometheus + Grafana.
Основные возможности:
- Health checks - проверка "здоровья" приложения (база данных доступна или нет, есть ли соединение с
внешними сервисами и пр.) через эндпоинт/actuator/health.
- Метрики (Metrics) - автоматически собирает и предоставляет данные: загрузка CPU, память, количество
HTTP-запросов, время их обработки, активные потоки и т. д. Доступ через /actuator/metrics.
- Информация о приложении - версия, билд-инфо, git-commit, окружение. Доступ через /actuator/info.
- Управление - можно включить эндпоинты для управления приложением: graceful shutdown, управление
логгерами, просмотр и изменение уровня логирования на лету.
- Интеграция с системами мониторинга - например, Prometheus, Grafana, New Relic и др. — Actuator
легко подключается к этим инструментам.
Примеры популярных эндпоинтов:
- /actuator/health — состояние приложения.
- /actuator/info — информация о приложении.
- /actuator/metrics — метрики (CPU, память, запросы).
- /actuator/loggers — просмотр и изменение уровней логирования.
- /actuator/env — параметры окружения.
Пример использования:
Добавить зависимость:
implementation("org.springframework.boot:spring-boot-starter-actuator:4.0.0-M2")
В application.properties включить нужные эндпоинты:
management.endpoints.web.exposure.include=health,info,metrics
После запуска приложение будет доступно по:
http://localhost:8080/actuator/health
http://localhost:8080/actuator/metrics