Spring АйО
Русскоязычное сообщество Spring-разработчиков. Habr: bit.ly/433IK46 YouTube: bit.ly/4h3Ci0x VK: bit.ly/4hF0OG8 Rutube: bit.ly/4b4UeX6 Яндекс Музыка: bit.ly/3EIizWy Чат для общения: @spring_aio_chat По вопросам сотрудничества: @befayer
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Spring АйО
تُعد قناة Spring АйО (@spring_aio) لاعباً نشطاً. يضم المجتمع حالياً 10 926 مشتركاً، محتلاً المرتبة 11 319 في فئة التكنولوجيات والتطبيقات والمرتبة 59 765 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 10 926 مشتركاً.
بحسب آخر البيانات بتاريخ 24 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 73، وفي آخر 24 ساعة بمقدار 1، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 57.34%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 25.34% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 6 265 مشاهدة. وخلال اليوم الأول يجمع عادةً 2 769 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 40.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل айо, хабр, api, jep, amplicode.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Русскоязычное сообщество Spring-разработчиков.
Habr: bit.ly/433IK46
YouTube: bit.ly/4h3Ci0x
VK: bit.ly/4hF0OG8
Rutube: bit.ly/4b4UeX6
Яндекс Музыка: bit.ly/3EIizWy
Чат для общения: @spring_aio_chat
По вопросам сотрудничества: @befayer”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 25 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
Point. Сейчас это обычно не миллион точек подряд, а миллион ссылок на объекты в куче. У каждого объекта есть служебные данные, его нужно создать, потом убрать сборщиком мусора. Плюс процессор постоянно прыгает по памяти, а это медленно.
Project Valhalla добавляет value class. Это обычный на вид класс с полями, конструктором и методами, но без идентичности объекта. JVM сможет хранить такие данные плотнее: например, прямо внутри массива, без отдельного объекта для каждого значения.
JEP 401 планируют включить в JDK 28 как preview. Это еще не финал: value class пока может быть null, а полная поддержка быстрых generics и плотных коллекций появится позже. Но первый рабочий шаг Valhalla уже близко.
📎 Статья целиком: https://habr.com/ru/companies/spring_aio/articles/1050938/FetchType.LAZY на всех *ToOne связях, уверены, что лишних запросов в БД нет — и тут в логах всплывает необъяснимый SELECT, который вы не просили.
Особенно обидно, когда это @OneToOne: на @ManyToOne ровно тот же LAZY работает железно и всегда, а здесь Hibernate вдруг идёт в базу eagerly, будто вашей аннотации и не было.
А самое неприятное — большинство объяснений в сети сводятся к тому, что просто так уж устроено, но главный вопрос "Почему?" остается без ответа. Почему один и тот же LAZY в одном
случае работает, а в другом молча игнорируется?
В новой статье Михаил Поливаха, разбирает по полочкам:
☑️ Что на самом деле такое FetchType.LAZY и почему это всего лишь hint, а не приказ;
☑️ Почему @OneToOne иногда невозможно сделать lazy именно в Java;
☑️ Почему @ManyToOne при этом ленив всегда — и при чём тут владение связью и foreign key;
☑️ Как с этим жить: optional = false, дизайн схемы, @MapsId и другое.
📎 Подробнее в статье на Хабр: https://habr.com/ru/companies/spring_aio/articles/1050462/Запускаю State of Production Engineering 2026 - исследование о том, как команды разработки живут в ПРОДе. Это не опрос про Java. Не опрос про Kubernetes. Не опрос про DevOps. И не "какой инструмент observability вы используете". Смотрим шире: - архитектура и владение - поставка и безопасность релизов - управление инцидентами - observability как способность расследовать, а не просто смотреть графики - resilience - данные - рантайм и работа с платформой - AI в процессе SDLC - инженерная культура - стоимость инцидентов, даунтаймы и надежность. Основная идея проста: зрелость production engineering - это не наличие инструментов, а способность команды управляемо проводить изменение от идеи до стабильной эксплуатации в ПРОДе. Нужны ответы людей, которые действительно связаны с ПРОДом: CTO, Head of Engineering, тимлиды, архитекторы, разработчики, SRE, DevOps, QA лиды, delivery/product менеджеры - все, кто участвует в релизах, инцидентах, эксплуатации, архитектурных решениях и инженерных процессах. Анкета занимает примерно 10–15 минут. Можно отвечать без имени и компании. По итогам подготовлю публичный отчет и бенчмарки по зрелости production engineering. Ваш опыт очень важен.Пройти опрос: State of Production Engineering 2026
spring.datasource.connection-fetch=lazyСмысл такой, что нет SQL — нет connection. То есть раньше приложение брало connection на всякий случай. А теперь только когда он реально нужен. ⚠️ Обратите внимание, что данная настройка работает не только с Hibernate. Более того, вообще любая блокирующая технология доступа к БД в экосистеме Spring (
JdbcClient, Spring Data JDBC и т.д.) может работать с этой фичей.
Происходит это потому, что под капотом используется LazyConnectionDataSourceProxy, который, на самом деле, существует давно. Просто раньше надо было знать о нем, лезть в конфиг и руками оборачивать DataSource.
В итоге, где это реально имеет смысл:
— широкие @Transactional границы;
— early-return без похода в БД;
— нагрузка, где каждый idle connection уже начинает стоить дорого.
Флаг довольно удобный. Имейте в виду!-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY---—Его используют OpenSSL, certificate authorities, OpenSSH, YubiKey и еще куча инфраструктурных инструментов. Проблема в том, что Java давно умеет работать с криптографическими объектами —
PublicKey, PrivateKey, X509Certificate, X509CRL, — но вот удобного стандартного API для PEM до сих пор не хватало.
Раньше нам, разработчикам, часто приходилось делать все ручками, например, убирать BEGIN/END, декодировать Base64, изучать алгоритм ключа, выбирать нужный KeyFactory или CertificateFactory, а для encrypted private key еще и писать отдельную пачку кода. Вообще в криптографии самодельный парсер – не самое подходящее место, где нужно показывать свою творческую натуру)
Так вот, JEP 538 добавляет в java.security несколько новых сущностей:
–Пример становится сильно проще:PEMEncoder— кодирует криптографические объекты в PEM; –PEMDecoder— декодирует PEM обратно в Java-объекты; –BinaryEncodable— общий маркер для объектов, которые можно представить в бинарном виде и завернуть в PEM; – PEM — универсальный контейнер для PEM-данных, если для конкретного типа нет отдельного Java API; –CryptoException— runtime-исключение для криптографических ошибок.
PEMEncoder encoder = PEMEncoder.of();
String pem = encoder.encodeToString(publicKey);
И обратно:
PEMDecoder decoder = PEMDecoder.of();
PublicKey key = decoder.decode(pem, PublicKey.class);
Еще отдельно улучшили работу с зашифрованными приватными ключами. PEMEncoder можно настроить через withEncryption(password), а PEMDecoder — через withDecryption(password). Для более продвинутых сценариев расширили EncryptedPrivateKeyInfo. Там появились методы для шифрования BinaryEncodable, получения PrivateKey и даже KeyPair, если внутри есть и публичная, и приватная часть.
В третьем preview есть и небольшие, но важные изменения по API:
– PEM теперь обычный класс, а не record — это дает разработчикам OpenJDK больше гибкости для дальнейшего развития API без ограничений, которые накладывает неизменяемая структура record; –Главная идея такая, что работа с PEM должна быть стандартной, короткой и менее хрупкой. Не ручками, а через нормальный API платформы. Но это все еще preview API! В JDK 27 его нужно включать черезDEREncodableпереименован вBinaryEncodable— название стало точнее отражать назначение интерфейса: он работает не только с DER-представлением, а с бинарным кодированием в целом, что делает API понятнее для разработчиков; –PEMDecoder.withFactory(...)сталwithFactoriesOf(...)— новое имя лучше показывает, что метод может работать с несколькими фабриками объектов, повышая читаемость и снижая вероятность неправильного понимания API; – добавленCryptoException— единое runtime-исключение упрощает обработку криптографических ошибок и избавляет от необходимости разбираться с большим количеством специализированных исключений в типовых сценариях; – в PEM появились конструкторы, принимающие Base64-контент в byte[] — это позволяет работать с уже загруженными или полученными по сети данными без лишних преобразований в строки, что делает код проще и потенциально эффективнее.
--enable-preview, да и сигнатуры еще могут поменяться. Круто, что Java постепенно забирает в стандартную библиотеку то, что раньше приходилось решать руками или внешними зависимостями.
Полезная или проходная фича?Знать Spring Data JPA должен любой Spring-разработчик. Ждём того же от AI-агента.
Справляются ли с этим современные модели? Смотря какие.
Opus 4.8 ошибается реже остальных, но и он не идеален: вчера агент настроил связь между сущностями правильно, а сегодня на той же задаче добавил CascadeType.ALL 🤦♂️.
Skills, которые объясняют агенту особенности фреймворка, значительно поднимают качество кода у моделей среднего класса. На отдельных задачах такие скиллы подтягивают Haiku почти до уровня Opus!
Этому и посвящён скилл недели.
📚 Какие ошибки агенты чаще допускают с JPA и как их избежать, разобрали в статье на Хабре.JEP 401 is the smallest piece of Valhalla that we can ship on its ownЭто, вероятно, один из самых важных и больших JEP-ов, которые попадут в mainline JDK. Там PR на 200+ тысяч строк кода, я не шучу. Тем не менее, такие вещи, как: - Null-Restricted типы, наподобие
String! (Ссылка, типа String! не может указывать на null)
- Примитивы в качестве Generic типов, т.е. вещи, наподобие List<int> (не List<Integer>)
и ряд других - они попадут в mainline в качестве preview позже.
Тем не менее, это крайне значимый шаг. Будем держать Вас в курсе!Order вместе с OrderItem не мог безопасно ограничиться на уровне SQL. Из-за join один заказ мог превратиться в несколько строк, и limit мог обрезать коллекцию. Поэтому Hibernate загружал все подходящие строки, а страницу выбирал уже в памяти. На больших данных это, конечно же, било по памяти и могло закончиться OutOfMemoryException. Да и в целом не очень перформансно это, согласитесь.
Дождались, и теперь Hibernate сначала выбирает нужные id родительских сущностей во вложенном запросе, а затем загружает для них полные дочерние коллекции. Пагинация остается в БД, данные не режутся.
Еще в 7.4 появились history и audit tables. @Temporal хранит версии строк и позволяет читать сущность на конкретный момент времени. @Audited пишет изменения ADD/MOD/DEL в audit-таблицу без Envers.
📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1047844/— Упростили работу с tools Теперь Spring AI лучше работает со сценариями, где модель должна вызывать внешние функции и инструменты. Плюс появился механизм, который помогает не отправлять модели сразу все доступные инструменты, а подбирать только нужные. Это полезно, когда инструментов много и не хочется засорять контекст. — Сильнее прокачали MCP Spring AI обновился до MCP SDK 2.0 и в целом стал лучше встроен в историю с MCP. Для тех, кто смотрит в сторону AI-приложений с внешними инструментами и сервисами, это важный шаг. — Обновили интеграцию с OpenAI Под капотом Spring AI теперь использует официальный Java SDK от OpenAI. Для разработчиков это обычно хороший знак: меньше самодельных решений, больше стабильности и предсказуемости. — Привели в порядок память чата Проще говоря, Spring AI стал аккуратнее хранить историю сообщений. Это значит, что в реальных приложениях меньше шансов получить путаницу в сообщениях, неправильный порядок ответов и странное поведение модели. — Сделали настройки более понятными Меньше неявной магии, больше прозрачности. Некоторые настройки теперь работают предсказуемее, и поведение модели проще контролировать явно.В общем стало больше предсказуемости, лучше интеграция со Spring-стеком, меньше неявного поведения в чувствительных местах вроде tool calling, memory и MCP. Помним, что это major release. Переход с 1.1.x потребует внимательного апгрейда: breaking changes есть в tool calling, memory, MCP и конфигурации. 📎 Документация по 2.0.0 📎 Документация по переезду с 1.1.х на 2.0.0 ❓ Кто-то использует Spring AI в реальных сервисах? Или еще подождем?
getXXX(), который вроде бы просто геттер, отдающий данные наружу.
Но проблема в том, что в этот момент наружу может утекать изменяемое внутреннее состояние объекта. А значит, ломается инкапсуляция, начинают нарушаться инварианты, а баги в таких местах потом дебажатся мучительно долго. Для библиотек и платформенного кода это ещё опаснее: однажды такой API становится публичным контрактом, и цена ошибки вырастает в разы.
И самое неприятное, что на этом история не заканчивается: подобные решения иногда расширяют attack surface системы и в плохом сценарии становятся частью куда более серьёзных инцидентов. В новой статье разбираю именно такой случай на простом Java-примере и показываю, почему эта ошибка в дизайне API может стоить очень дорого. Если вам близки темы Java, Spring и аккуратного API-дизайна, почитайте, статья небольшая 😉
📎 Читать на Хабр:
https://habr.com/ru/companies/spring_aio/articles/1046620/Как вы знаете, первичное наполнение контекста — крайне важная задача. При этом все популярные агенты (Claude Code, Codex, OpenCode и т. д.) выполняют ее без какого-либо понимания, как устроены приложения, написанные на Spring. Как результат: не находятся бины, дублируются компоненты, снижается скорость работы и растет расход токенов. Эти проблемы как раз и призван решить данный скилл.📚 Погружаемся в Spring Explore на Хабре: https://habr.com/ru/companies/haulmont/articles/1041314/
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
