Spring АйО
8.43K subscribers
303 photos
209 videos
402 links
Русскоязычное сообщество Spring-разработчиков.

Habr: bit.ly/433IK46
YouTube: bit.ly/4h3Ci0x
VK: bit.ly/4hF0OG8
Rutube: bit.ly/4b4UeX6
Яндекс Музыка: bit.ly/3EIizWy

Канал для общения: @spring_aio_chat
Download Telegram
🧪 Spring Framework 6.2.0: переопределение бинов в тестах

Недавно вышел Spring Framework 6.2, который включил в себя множество улучшений и новых возможностей. К одним из них можно отнести переопределение бинов в тестах.

В новом переводе от команды Spring АйО вы узнаете как можно использовать @TestBean, @MockitoBean и @MockitoSpyBean для переопределения бинов в тестах.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/859430/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍93
🍃 Spring АйО на IT Community Day

На конференции IT Community Day выступили два наших эксперта из сообщества Spring АйО с докладами.

🎤 Михаил Поливаха представил доклад "Spring-AI с Gigachat. Интегрируем LLM в ваше приложение безболезненно", в котором рассказал о том, как внедрить мощные языковые модели в проекты на Spring и получить максимум пользы с минимальными трудностями.

🎤 Павел Кислов выступил с докладом "Spring Security ACL. Концепции гранулированного доступа в технологиях Java и почем фунт лиха", где раскрыл сложные, но важные аспекты настройки тонкого доступа в Spring Security ACL.

Мы подготовили видео-записи этих выступлений, чтобы вы могли детально познакомиться с темами:

😉 YouTube
- Выступление Михаила Поливахи
- Выступление Павла Кислова

😄 VK
- Выступление Михаила Поливахи
- Выступление Павла Кислова

🥰 RUTUBE
-
Выступление Михаила Поливахи
-
Выступление Павла Кислова
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥103
🔄 Версионирование эндпоинтов — это просто

Команда Spring АйО перевела и адаптировала доклад "Endpoint versioning made simple" Бауке Найхаус (Bouke Nijhuis) с последнего Devoxx Belgium. 

В докладе автор объясняет, зачем нужно версионировать API, и подробно сравнивает различные подходы к реализации этой задачи.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/859910/
👍27🔥114
#ВопросЭксперту: почему в Spring Data JDBC отсутствует пагинация для native query?

Отвечает эксперт сообщества Spring АйО – Михаил Поливаха.

–––

Вопрос действительно интересный, и хотя такая возможность могла бы быть полезной, здесь есть свои нюансы и подводные камни. Давайте разберёмся, какие именно.

Начнём с того, что native query — это запросы, написанные на чистом SQL. В Hibernate их часто используют, когда возможностей HQL/JPQL недостаточно или когда нужны специфичные фичи для конкретной СУБД. Однако ни один ORM-фреймворк (будь то Spring Data JDBC, Hibernate или любой другой) не может на 100% знать структуру вашего нативного запроса — он может лишь предполагать. В таком запросе может быть что угодно, и ORM-фреймворк не всегда сможет корректно с ним работать.

Теперь представьте ситуацию: у нас есть Spring Data JPA native query для PostgreSQL и следующий набор тестов:


@Query(
value = "SELECT * FROM users FOR UPDATE SKIP LOCKED;",
nativeQuery = true
)
List<User> findBySomething(String name, Pageable pageable);

@Test
void testWithoutSort() {
userRepository.findBySomething("another", PageRequest.of(1, 10));
}

@Test
void testWithSort() {
userRepository.findBySomething("another", PageRequest.of(1, 10, Sort.by("name")));
}


Первый тест пройдёт успешно, а второй — нет. Почему?

Во втором случае передаётся параметр сортировки через Pageable. Но у jakarta.persistence.Query нет API для установки сортировки, хотя её всё же необходимо учесть. Другими словами, JPA-ровайдер не может нам тут помочь, т.к. он не предоставляет возможности прогнать параметры сортировки через свой API.

В итоге вставлять сортировку в native запрос приходится Spring Data JPA, и ей в буквальном смысле надо угадывать, куда же в запросе поставить ORDER BY. Да, Spring Data JPA может модифицировать ваши native query (существует даже API, позволяющий делать это динамически). Как вы можете догадаться, в данном случае Spring Data JPA не угадает с позиционированием.

Вот пример SQL, который будет сгенерирован в упавшем тесте


SELECT
*
FROM
users
OFFSET
? ROWS
FETCH NEXT ? ROWS ONLY FOR UPDATE SKIP LOCKED;
ORDER BY
FOR.name ASC -- НЕПРАВИЛЬНО! ORDER BY ЗДЕСЬ БЫТЬ НЕ ДОЛЖНО!


Проблема заключается в том, что Spring Data JPA вставляет ORDER BY в неподходящее место, что и приводит к ошибке.

С нативными запросами ORM-фреймворки, такие как Spring Data JPA и Hibernate, вынуждены догадываться, куда вставить OFFSET, LIMIT и ORDER BY. Чаще всего они угадывают верно, так как эти конструкции обычно находятся в конце запроса, но бывают исключения.

Таким образом, поддержка пагинации для нативных запросов — действительно полезная функция, но нужно понимать, что её реализация может привести к множеству багов, связанных с неверным определением позиции для OFFSET, LIMIT и ORDER BY.

Тем не менее, мне кажется, что эта фича стоит того, чтобы её внедрить! Делитесь своим мнением в комментариях, буду рад обсудить!

🖥 Исходный код поста на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3210🔥7
👀 От кода к смыслу: улучшенная панель Structure в IntelliJ IDEA 2024.3

Совсем недавно вышла IntelliJ IDEA 2024.3 – последний мажорный релиз IDE в этом году. И одним из самых важных нововведений этой версии стала улучшенная панель Structure.

Команда Spring АйО перевела статью Siva Katamreddy (Developer Advocate в JetBrains), в которой Siva рассказывает, как улучшенная панель помогает решать задачи, и делится историей создания этой функциональности.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/860510/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍1052
⭐️ Java Rock Stars Meetup

Уже через неделю 3 эксперта сообщества Spring АйО примут участие в Java Rock Stars Meetup!

Михаил Поливаха выступит с докладом "Spring Data JPA. Все сложнее, чем кажется"

В повседневной разработке enterprise-приложений при работе с базой данных доминирует JPA. В частности, как правило, люди используют Spring Data JPA. Хоть и этот фреймворк используется довольно активно, многие не понимают как именно Spring Data JPA работает с Hibernate: как Spring Data JPA менеджит сессии, как в одном приложении уживаются транзакции JPA-спецификации и транзакции самого Spring?


Павел Кислов выступит с докладом "Spring Security, как дела?"

Для многих spring security застыл в состоянии, в котором он был до момента выхода spring boot 3 и до spring security 6.0. Даже с этого момента произошло немало событий в жизни security-части фреймворка: вышел новый authorization server, в oauth2 добавили поддержку rest client, поменялось архитектурное видение разработчиков фреймворка и еще много всего. Это ли не повод синхронизировать головы и актуализировать понимание? Этим и займемся.


А Рустам Курамшин станет ведущим этого мероприятия.

Участие абсолютно бесплатное, главное успеть зарегистрироваться (количество мест ограничено)!

🗓 4 декабря (среда) 18:30 мск
📍 Лофт Casa Picassa, Бауманская ул., 11, стр. 8, зал Кандинский
❗️ Вход по регистрации
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍125
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥7👍61
👩‍💻 Что нового в Spring Boot 3.4

Недавно состоялся релиз Spring Framework 6.2, вслед за ним последовал релиз Spring Boot 3.4.

Команда Spring АйО подготовила перевод статьи Josh Long об основных изменениях и улучшениях, которые вошли в последний релиз.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/861182/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥76
Forwarded from Amplicode
😡 Создаём CRUD REST API в Spring Boot быстро и просто вместе с Amplicode

😉 СМОТРЕТЬ НА YOUTUBE

😄 СМОТРЕТЬ В VK ВИДЕО

🥰 СМОТРЕТЬ НА RUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥6😁431👎1🤔1
🌟Что нового в Spring Framework 6.2, Spring Boot 3.4 и каковы планы на будущее?

Команда Spring АйО перевела статью InfoQ, посвящённую новым версиям Spring Framework и Spring Boot.

В статье обсуждаются улучшения последних релизов, анонс следующего поколения Spring, запланированного на 2025 год, а также ответы на вопросы редакции InfoQ от руководителя проекта Spring Framework Юргена Хёллера и контрибьютера Spring Framework core Себастьяна Делюза.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/861782/
🔥18👍962
🔐 Что нового в Spring Boot 3.4: Spring Security

Команда Spring АйО перевела статью об улучшениях Spring Security 6.4.1 в новом релизе.

В новой версии поддержаны современные методы аутентификации, такие как Passkeys и одноразовые OTTs токены. Josh Long называет этот релиз doozie - что-то сильно потрясающее. Действительно ли это так?

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/862400/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥116
🗓 Еженедельный дайджест №23

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

🍃 Spring АйО

Что нового в Spring Boot 3.4
Что нового в Spring Framework 6.2, Spring Boot 3.4 и каковы планы на будущее?
Что нового в Spring Boot 3.4: Spring Security
Опрос "Какую СУБД используете в продакшене?"

⭐️ Партнёры

Создаём CRUD REST API в Spring Boot быстро и просто вместе с Amplicode

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
🌐 Как жить без IntelliJ IDEA? Часть 3 — HTTP Client

В предыдущей статье "Как жить без IntelliJ IDEA" мы разбирали, какие есть альтернативы Ultimate в части поддержки Spring.

В этой части команда Spring АйО исследует, чем можно заменить встроенный HTTP-клиент JetBrains, за что его так любят разработчики и какие инструменты могут стать достойной альтернативой.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/863106/
🔥21👍126🤔2
Forwarded from Amplicode
😲 Топ 10 нововведений IntelliJ IDEA 2024.3 и Amplicode 2024.3

А для тех, кто больше любит смотреть, а не читать – подготовили обзор последних новинок из мира инструментов для разработчиков в видео-формате.

😉 СМОТРЕТЬ НА YOUTUBE

😄 СМОТРЕТЬ В VK ВИДЕО

🥰 СМОТРЕТЬ НА RUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23😁106👍6👎3
🗑 Mark–Scavenge: ждем, пока мусор выбросит себя сам

Исследователи из Oracle и Уппсальского университета представила новый алгоритм сборки мусора — Mark–Scavenge. Он решает проблему избыточной работы, которая возникает при использовании доступности объекта как прокси для оценки его "живучести".

Команда Spring АйО перевела статью, в которой можно подробнее ознакомиться с подробностями работы нового алгоритма.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/863830/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥531🤯1
#ВопросЭксперту: В одном из своих докладов ты говорил, что рядом со Spring Security в текущее время жив и здравствует Authorization Server. А зачем он нужен, если мы все уже привыкли к Keycloak, а кроме него есть и полноценные решения с поддержкой и обслуживанием вроде Okta?

Отвечает эксперт сообщества Spring АйО – Павел Кислов.

–––

Spring Authorization Server - это инструмент, который при прочих равных может быть потенциально гибче. Можно дописать свою логику любую и он будет вести себя так, как вы захотите. Его можно адаптировать под нужды вашей экосистемы и научить делать все необходимые вам "финты". Кроме того, для Spring-разработчика он может быть потенциально понятнее. Если что-то идет не так, можно открыть исходники вашего проекта и подебажить, воспроизведя уязвимость в "карманном варианте", например. Работа с хранилищем данных настраивается и дописывается. И это огромный плюс. Вот нет у вас вездесущего PostgreSQL. или нужна нереляционная база. По "исторически сложившимся" причинам, например. Вы можете написать свою имплементацию для нужного сервиса работы с данными и подключить любой источник данных. В Keycloak или Okta мы были бы ограничены.

Еще одним важным аспектом является потенциальная "лицензия" и коммерческая часть. Выбирая опенсорс решение вроде Keycloak, вы часто остаетесь между двух огней. С одной стороны нет возможности досконально изучить исходники того же Keycloak, хоть он и написан на Java. В него бы пришлось сильно погрузиться и прочитать большое количество исходников, чтобы реализовать свою хотелку, кроме того пришлось бы читать еще и исходники подтянутых им maven-зависимостей. Задача не из легких. С другой стороны он уже готовый этот Keycloak. Разверул и поехали. И в то же время, чтобы понять, как сделать нестандартный ход под ваш конкретный запрос тяжело. Кода много.

Со Spring Authorization Server ты оказываешься в игровой комнате с конструктором в руках. Как собрал, так и поехало. Допустим, не нужен тебе ui - не используй ui. Это просто бекенд приложение. У вас уже есть ui "с прошлого раза", у которого используются специфичные url? - укажите их в конфигах Authroization Server, и он будет использовать их.

Мы можем "натянуть сову на глобус", и все это в рамках привычного для нас кода на Spring. Выбрав коммерческое решение, вы часто получаете "закрытую коробочку" и многих это может оттолкнуть. Кроме того, вы отдаете производителю на откуп решение проблем с купленным решением и завяываетесь на сроки вендора. Если вы не делаете rocket science и пользуетесь совсем небольшим количеством возможностей, то, возможно, есть смысл присмотреться к самостоятельной реализации. Это позволяет быстро чиниться и дорабатываться в случае необходимости.

Spring Authorization Server - это совсем не "серебряная пуля" в сравнении с уже имеющимися решениями, а просто возможная альтернатива, развитие и поддержка которой реализуемы и понятны c точки зрения кода для Spring/Java-разработчика.

Кстати, Spring предоставляет неплохую документацию к Authorization Server и отличные описания к исходникам на Github, которые подсвечивают все нужные термины и дают прямые ссылки на спецификации, читая которые, можно разобраться в том, как и что на самом деле устроено в "безопасном" мире.

Отличная пища для ума, поле для изучение и полигон для экспериментов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥35👍178👌2
👥 Concurrency в Spring Boot приложениях: как сделать правильный выбор

Команда Spring АйО перевела и адаптировала доклад "Concurrency in Spring Boot Applications: Making the Right Choice" Андрея Шакирина с последнего Devoxx Belgium.

В докладе автор рассказал про различные подходы по работе с concurrency в целом и в Spring Boot приложениях в частности.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/862950/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍113👎1