16 September 2024

Amplicode Launch Event – конвейер для Spring-приложений прямо в IntelliJ IDEA

На прошлой неделе команда 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.

Кирилл отметил, что существует три основных варианта решения задачи:

  1. Создать Docker Compose файл
  2. Воспользоваться TestContainers
  3. Использовать 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 и связанные с ним технологии!