На прошлой неделе команда Amplicode провела митап, который длился целых 3,5 часа! За это время состоялось шесть докладов, затрагивающих все аспекты разработки приложений на Spring — от настройки окружения до создания бизнес-логики и внедрения админки на React Admin.
История и философия Amplicode (Илья Кучмин)
Илья Кучмин, разработчик Amplicode, открыл митап с рассказа о том, как зарождался продукт, к чему он движется сейчас и какие проблемы помогает решать.
Локальное окружение с Docker Compose для Spring Boot (Кирилл Толкачёв)
Затем к митапу присоединились Георгий Власов (Developer Advocate Amplicode) и Кирилл Толкачёв (участник программного комитета JUG RU Group). Они обсудили приложение, с которым предстояло работать, и задачи, которые нужно было решить. Первый шаг — настройка локального окружения с Docker Compose и добавление сервисов для PostgreSQL и pgAdmin.
В течение видео было продемонстрировано, как с помощью Amplicode можно эффективно настроить окружение для приложения, используя Docker Compose.
Кирилл отметил, что существует три основных варианта решения задачи:
- Создать Docker Compose файл
- Воспользоваться TestContainers
- Использовать docker-compose-starter для Spring Boot
В ходе обсуждений ребята приняли решение сосредоточиться на создании Docker Compose файла. Было показано, каким образом используя Amplicode можно не только генерировать сервисы для Docker Compose с нуля, но и как редактировать уже существующие сервисы.
Проблемы JPA в Spring PetClinic и способы их решения (Илья и Фёдор Сазоновы)
Когда приложение было готово к работе, Илья и Георгий пригласили экспертов сообщества Spring АйО — Илью и Фёдора Сазоновых. За 40 минут они не только решили несколько бизнес-задач, но и устранили накопившиеся за долги годы существования приложения проблемы с JPA.
Эксперты начали с оптимизация модели данных в JPA. Первым шагом стало исправление односторонних связей, снижающих производительность приложения. Также обратили внимание на множественные
Eager
ассоциации, которые также могут негативно сказаться на производительности, но было принято решение не вносить изменения в рамках текущей задачи.
Далее был рассмотрен тип ID, используемый в приложении. Обсудили, почему использование стратегии
Identity
может быть не лучшим решением и решили заменить ее на
Sequence
. После этого добавили новое поле
salary
и модифицировали соответствующий экран. Илья и Фёдор очень удивились, когда увидили, что приложение смогло запуститься после изменений в типе идентификатора и добавления нового поля. Оказывается, в приложении не был настроен параметр
hibernate.ddl-auto
.
Наконец, эксперты и ведущие погрузились в написание Flyway миграций, и решению проблемы N+1. Были рассмотрены различные варианты решения этой проблемы: от использования
join fetch
и
@EntityGraph
и до
@BatchSize
и
spring.jpa.properties.hibernate.default_batch_fetch_size
.
Разрабатываем правильный REST API для Spring Boot (Рустам Курамшин)
Далее к митапу присоединился Рустам Курамшин, ещё один эксперт сообщества Spring АйО. Вместе они разработали REST API для интеграции с внешними сервисами и исправили проблемы с существующими эндпоинтами. Также заложили основу для CRUD API, который позже будет использоваться фронтом написанном на React Admin.
В течение 40 минут эксперт и ведущие выполнили три основные задачи: исправили существующий endpoint, реализовали CRUD REST API для будущего Admin UI и разработали API для интеграций.
В процессе решения первой задачи ребята обсудили преимущества и недостатки использования MapStruct.
Далее был создан CRUD REST-контроллер с использованием возможностей Amplicode. При генерации тестов с использованием MockMvc Рустам выразил предпочтение к WebTestClient, отмечая, что такие тесты хотя и выполняются дольше и требуют решения вопросов безопасности, но обеспечивают большую надёжность. Ребята из команды Amplicode признали это и упомянули планы по поддержке WebTestClient и WireMock.
В заключительной части эксперт и ведущие разработали кастомное API для внешних интеграций, предоставляющее информацию о владельцах только при наличии ключевых данных.
Настраиваем Spring Security и Keycloak (Павел Кислов)
Следующим на очереди был Павел Кислов, эксперт сообщества Spring АйО, который помог настроить Spring Security и интегрировать Keycloak для управления доступом.
Ребята из Amplicode приступили к решению вопросов безопасности, пригласив для помощи Пашу Кислова. Вместе они проанализировали текущую и планируемую инфраструктуры, включающую legacy админку на Thymeleaf для менеджеров и администраторов, API для внешних интеграций и стандартизированное CRUD API для админки на React Admin. Было решено использовать FormLogin для legacy UI из-за небольшого количества пользователей, а для остальной системы внедрить OpenID/OAuth2 на базе KeyCloak.
Admin UI с использованием React Admin для Spring Boot (Александр Шустанов)
В завершении митапа Александр Шустанов (Product Manager Amplicode) реализовал современный AdminUI с помощью React Admin прямо в VS Code, добавив последний штрих в приложении.
В процессе создания админки на React Admin ребята затронули довольно много интересных вопросов, касающихся как технологий, которые уже поддерживает Amplicode Fullstack, так и тех, которые только планирует поддержать.
Полная запись мероприятия и ответы на вопросы
Для тех, кто пропустил митап или хочет пересмотреть его целиком, мы также опубликовали полную запись вместе с сессией вопросов и ответов.
Подписывайтесь на наши Telegram и YouTube, чтобы не пропустить новые материалы про Amplicode, Spring и связанные с ним технологии!