Spring АйО
9.7K subscribers
389 photos
277 videos
506 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
🥸 Обнаружение взаимоблокировок на JVM с помощью Fray

Команда Spring АйО подготовила перевод про Fray — инструмент для обнаружения и воспроизведения ошибок многопоточности в Java-программах.

Основанный на научных исследованиях и написанный на Kotlin, Fray использует технику теневой блокировки для выявления взаимоблокировок и других проблем синхронизации. Он уже доказал свою эффективность на таких проектах, как Kafka, Flink и Lucene.

Комментарий от Михаила Поливаха:

В экосистеме Java уже довольно долгое время существуют решения, которые позволяют тестировать concurrent сценарии, например JCStress от разработчиков OpenJDK или Lincheck от JetBrains.

Важно то, что, как заявляется, Fray способен не просто выявлять баги в concurrency, но и воспроизводить их, а также помочь в разъяснении причин багов, а это very huge deal.

Баги в многопоточности они тем и неприятны, что они плавающие, трудно воспроизводимые и т.д. Если Fray позволит не просто обнаружить баг, но и отдебажить его, то он явно найдет спрос в Enterprise.


📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/976924/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍722🤩2
This media is not supported in your browser
VIEW IN TELEGRAM
🆕 Новая usability фича в IntelliJ IDEA!

Теперь можно вызывать действия прямо из окна автодополнения. А если дважды нажать точку (..), появится список всех доступных действий.

Если зайдёт — добавят и в другие IDE. Выглядит удобно.

🔗Полный what's new: https://www.jetbrains.com/idea/whatsnew/2025-3/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥48👍1192😁1🤩1
💰 Изменения цен на GitHub Actions

GitHub только что анонсировал изменения в ценообразовании Actions. Ранее GitHub Actions имел бесплатный control plane.

Это означало, что если вы использовали GitHub Actions, но запускали задачи вне GitHub-hosted runners — будь то ваши собственные машины или в вашем собственном AWS аккаунте — вы ничего не платили GitHub за эти минуты; вы платили только за вычислительные ресурсы. Теперь подход изменился. Команда Spring АйО подготовила перевод анонса команды Github.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/977674/
🤯76👎3🔥2👍1
🌱 Некоторые детали реализации Slice Pagination в Spring Data JPA

Spring Data JPA предлагает два подхода к пагинации: Page и Slice. В отличие от Page, Slice не знает общего количества записей, но всё равно умеет определять, есть ли следующая страница. Как это возможно без COUNT-запроса?

На этот вопрос ответил наш эксперт Михаил Поливаха:

Мы уже как-то писали о том, что в Spring Data есть 2 способа вернуть данные в постраничном виде - Page и Slice. Разница довольно простая - Slice не знает общий размер датасета, который удовлетворяет запросу, а Page знает. Достигается это знание отправкой ещё одного COUNT-запроса в БД.

Однако, несмотря на это, Slice способен ответить на вопрос, есть ли следующая страничка данных:


public interface Slice<T> extends Streamable<T> {

/**
* Returns if there is a next {@link Slice}.
*
* @return if there is a next {@link Slice}.
*/
boolean hasNext();
}


То есть, как минимум, Slice должен понимать, следующая страничка с данными присутствует, при этом не делая "COUNT".

Чтобы реализовать это, Spring Data JPA, например, делает очень простую вещь:

int pageSize = 0;

if (pageable.isPaged()) {
pageSize = pageable.getPageSize();
createQuery.setMaxResults(pageSize + 1);
}

List<Object> resultList = createQuery.getResultList();
boolean hasNext = pageable.isPaged() && resultList.size() > pageSize


То есть, из БД запрашивается не pageSize, а pageSize + 1, то есть чуть-чуть больше. Ну и дальше простое сравнение - если нашли pageSize, то странички дальше точно нет, а если нашли pageSize + 1, то страничка дальше точно есть (хотя может и меньшего размера).

Вот так вот оно работает 😉
🔥63👌127👎2
Media is too big
VIEW IN TELEGRAM
🍃 AI-агенты портят разработчиков, JVM ничего не гарантирует, верните фишинг | Spring АйО Подкаст №45

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
🤩 СЛУШАТЬ НА SPOTIFY
🤩 СЛУШАТЬ НА APPLE PODCASTS

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁85👎1
🌱 Spring Boot наконец получил нативную поддержку gRPC

Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.

В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus. 

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/978418/
🔥6418👍162🤯1
🏎 Как ускорить MongoDB в Java: profiling, explain(), индексация и антипаттерны

Подготовили материал о том, почему «быстрый запрос в MongoDB» — это индексы, форма запроса, проекции, explain(), профайлер и наблюдаемость в Java/Spring Boot.

Разбираем, как отличать IXSCAN от COLLSCAN, где чаще всего прячутся антипаттерны (skip-пагинация, тяжёлые $regex/$nin, findAll), и как выстроить измеримый цикл оптимизаций от Atlas/Compass до Micrometer.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/979440/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍841
Forwarded from Amplicode
🤩 Продвинутый Telegram-бот для Spring АйО. Часть 1: Архитектура и первая рабочая версия

Запускаем цикл видео про разработку телеграм-бота на Spring!

В первом выпуске — база, на котором строится весь сервис. На самом деле, мы уже всё подключили, развернули и запустили в облаке, можно тыкать (@spring_aio_bot) 😉 Для подписчиков там даже есть приятный бонус)

В следующих частях покажем, как интегрировали в бота Spring AI и как разворачивали всё это дело.

Ну и конечно — код открыт и лежит на GitHub. Забирайте, изучайте, экспериментируйте!

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥1554😁2
Parallel streams — это не «бесплатный» прирост производительности, а дорогая оптимизация.

🟣 Любое распараллеливание добавляет накладные расходы: разбиение данных, управление задачами через fork-join, синхронизацию и объединение результатов. Если операция над элементом дешёвая или данных недостаточно много, этот оверхед полностью съедает потенциальный выигрыш — и последовательный стрим оказывается быстрее.

🟣 Вторая причина — ограничения самой задачи. Многие вычисления по природе последовательны или содержат существенную последовательную часть, которую нельзя распараллелить. Закон Амдала жёстко ограничивает максимальный speedup: даже небольшой последовательный участок ставит потолок ускорению, независимо от количества ядер. В streams эта доля часто больше, чем кажется.

🟣 Наконец, упор часто происходит не в CPU, а в память. Параллельные стримы хорошо работают на больших массивах, но быстро деградируют на графах, списках и указательных структурах. В таких случаях потоки не ускоряют вычисления, а просто параллельно ждут данные из памяти.

Подробнее в новом переводе статьи от Брайана Гоетца – одного из ключевых архитекторов экосистемы Java и главного авторитета по конкурентному и параллельному программированию в JVM.

@spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
25👍21🔥112
🚀 Тред-дампы и Project Loom (виртуальные потоки)

С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше.

Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980566/
🔥20👍117
🥷 Hidden классы в Java. Что скрывают Lambda выражения

С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего Unsafe::defineAnonymousClass.

Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность Unsafe, они лежат в основе ряда важных механизмов, такие как, например, реализация лямбд в JDK.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980928/
🔥17👍94
🛠 Михаил Поливаха. Garbage Collection. Где мы сейчас

Наш эксперт Михаил Поливаха выступил с докладом про сборку мусора:

Сборка мусора является довольно сложным механизмом. В большинстве managed языков runtime скрывает от нас детали дислокации памяти. С другой стороны, выбор определённого сборщика мусора может существенно улучшить производительность.

Поговорим о том, какие алгоритмы сборки мусора бывают, какие бывают концептуальные трейд оффы при их использовании, и какой алгоритм вам может подойти больше всего.


😉 СМОТРЕТЬ НА YOUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍953
Media is too big
VIEW IN TELEGRAM
🍃 gRPC в Spring Boot, зачем разработчику Hidden классы, HashMap vs MongoDB | Spring АйО Подкаст №46

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
🤩 СЛУШАТЬ НА SPOTIFY
🤩 СЛУШАТЬ НА APPLE PODCASTS

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥107🤩1
Forwarded from Amplicode
⚡️ Spring MCP: набор инструментов для AI-помощника от Amplicode

Эта статья дополняет предыдущую. Там мы зафиксировали проблемы. Здесь разберем, что именно мы сделали со стороны Amplicode, чтобы агент начал работать как опытный software engineer: опираясь на структуру проекта, детерминированные генераторы и понятные высокоуровневые операции.

Если коротко, в первой статье было несколько основных болей:

• LLM часто обучены на слегка устаревшем мире, и это вылезает в мелочах (и не только)
• Галлюцинации и нехватка контекста идут рука об руку: «кажется, в этой библиотеке должен быть такой метод» и пошло-поехало
• Переизбыток контекста тоже зло: агент прочитал половину репозитория, потратил деньги, запутался, а потом еще и забыл начало чата
• Типичный агентный workflow: «сгенерил простыню кода, оно не компилится, давай чинить, ой теперь сломалось другое»

И на этом фоне появляется логичный вопрос:

А можно сделать так, чтобы агент работал не с сырыми файлами, а с моделью проекта и сущностями фреймворка? Чтобы он не гадал, где DTO, как принято именовать контроллеры и какие миграции у вас используются?


Собственно, Spring MCP от Amplicode про это.

📚 Читать на Хабр: https://habr.com/ru/companies/haulmont/articles/976872/
👍18🔥123👎1
🍃 Дорогие друзья и участники сообщества Spring АйО!

Уходящий год еще раз показал, какую силу имеет профессиональное сообщество. Сегодня Spring АйО — это уже почти 10000 разработчиков, объединенных интересом к Spring, технологиям, обмену опыта и живому диалогу. Ваша вовлеченность, вопросы, комментарии и поддержка делают это пространство по-настоящему ценным.

В 2026 году нас ждут новые идеи, форматы и темы. Мы планируем еще больше полезных материалов, практических разборов и обсуждений того, что действительно важно для Spring-разработчиков.

Спасибо, что остаетесь с нами и разделяете этот путь. С новым годом, друзья!🎄
🔥9834🤩10👎1