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 911 مشترک است و جایگاه 10 978 را در دسته فناوری و برنامهها و رتبه 58 523 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 10 911 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 28 اوت, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -17 و در ۲۴ ساعت گذشته برابر 0 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 51.23% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 24.96% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 5 587 بازدید دریافت میکند. در اولین روز معمولاً 2 722 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 55 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند айо, хабр, 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”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 29 اوت, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
AGENTS.md и Skills недостаточно. Агенту нужны инструменты, которые проверят результат и помогут найти ошибку.
В новом видео разбираем это на примере ArchUnit: агент нарушит архитектуру Spring-приложения, получит упавший тест и самостоятельно исправит код.Но видео не про ArchUnit. Оно про то, как тесты, линтеры и анализаторы создают для AI-агента обратную связь и помогают ему работать качественнее. 😉 СМОТРЕТЬ НА YOUTUBE 😄 СМОТРЕТЬ В VK ВИДЕО 🥰 СМОТРЕТЬ НА RUTUBE
AGENTS.md и Skills недостаточно. Агенту нужны инструменты, которые проверят результат и помогут найти ошибку.
В новом видео разбираем это на примере ArchUnit: агент нарушит архитектуру Spring-приложения, получит упавший тест и самостоятельно исправит код.Но видео не про ArchUnit. Оно про то, как тесты, линтеры и анализаторы создают для AI-агента обратную связь и помогают ему работать качественнее. 😉 СМОТРЕТЬ НА YOUTUBE 😄 СМОТРЕТЬ В VK ВИДЕО 🥰 СМОТРЕТЬ НА RUTUBE
ApplicationStartup.
Есть три DefaultApplicationStartup. Используется по умолчанию и фактически ничего не записывает.
– BufferingApplicationStartup. Хранит события запуска в памяти. Удобен для локальной диагностики, тестов и просмотра через Actuator.
– FlightRecorderApplicationStartup. Передаёт данные в Java Flight Recorder для более глубокого профилирования.
Для быстрого анализа можно подключить буферизацию:
SpringApplication app = new SpringApplication(Application.class);
app.setApplicationStartup(
new BufferingApplicationStartup(2048)
);
app.run(args);
И открыть эндпоинт в настройках:
management.endpoints.web.exposure.include=startup
После запуска временная шкала будет доступна по адресу:
GET /actuator/startup
В ответе можно увидеть продолжительность отдельных этапов, их иерархию и имена создаваемых бинов:
{
"duration": "PT0.000754S",
"startupStep": {
"name": "spring.beans.instantiate",
"tags": [
{
"key": "beanName",
"value": "specialService"
}
]
}
}
У эндпоинта есть важная особенность:
– GET возвращает текущий снимок временной шкалы;
– POST возвращает снимок и очищает буфер.
Можно добавлять и собственные этапы. Например, отдельно измерять подключение к базе данных:
StartupStep step =
applicationStartup.start("app.database.connect");
try {
step.tag("database", "main");
connectToDatabase();
} finally {
step.end();
}
Такие этапы появятся рядом со стандартными событиями Spring. Это особенно полезно, когда во время инициализации выполняются миграции, прогреваются кэши, загружаются модели или создаются подключения к внешним системам.
Для продолжительного и более детального профилирования лучше использовать FlightRecorderApplicationStartup вместе с JFR и Java Mission Control.
Короче:
– нужен быстрый снапшот запуска - юзаем BufferingApplicationStartup;
– нужен глубокий анализ JVM - юзаем FlightRecorderApplicationStartup;
– нужна диагностика бизнес-инициализации, тогда добавляем собственные StartupStep.
Как-то так 🤓
🔗 Фул статья: https://habr.com/ru/companies/spring_aio/articles/1066976/Разрешить изменение `project_settings.json`?Нажимаете «Разрешить». Только агент записывает данные не в настройки проекта, а в
~/.ssh/authorized_keys. Если SSH доступен извне, добавленный ключ может открыть злоумышленнику вход на компьютер без пароля.
Исследователи Wiz назвали эту атаку GhostApproval и воспроизвели её сразу в шести AI-инструментах:
– Amazon Q Developer
– Claude Code
– Augment
– Cursor
– Google Antigravity
– Windsurf
Схема-то простая и рабочая) Вредоносный репозиторий содержит чисто символическую ссылку, файловую «переадресацию». Файл выглядит как project_settings.json, но на самом деле ведёт к ~/.ssh/authorized_keys или ~/.zshrc.
README просит агента изменить типа «настройку проекта». Агент выполняет инструкцию, следует по ссылке и пишет уже за пределами репозитория. Ну красота же.
Самое неприятное то, что в в тестах Windsurf и Amazon Q успевали изменить файл ещё до подтверждения пользователя. Augment выполнял чтение и запись вообще без запроса. А в Claude Code агент распознал реальный файл, но человеку всё равно показал безобидное имя project_settings.json.
AWS, Cursor и Google выпустили исправления. В актуальных версиях Claude Code есть предупреждение о таких ссылках. На момент публикации исследования Wiz не получила подтверждения исправлений от Augment и Windsurf.
Мораль find . -type l -ls
💡 Источники:
– исследование Wiz,
– бюллетень AWS,
– официальное исправление Cursor.
Они нас погубят... 🙃А – автоматизиция. Например, в TELUS Dependabot постоянно проверяются зависимости и при обнаружении уязвимости создаёт предупреждение и рекомендует исправляющий PR. В Synergy проверки Dependabot автоматически запускаются при создании каждого PR. А JFrog Xray можно настроить так, чтобы по данным об уязвимости система создала задачу в Jira, запретила скачивание библиотеки или остановила сборку.Поэтому ошибочная CVE, прошедшая проверку используемой платформы, способна превратиться не просто в строчку в базе, а в настоящий PR, задачу для разработчика или заблокированный релиз. Получается почти идеальный цикл: 1. ИИ придумывает уязвимость. 2. Автоматическая система принимает её за настоящую. 3. Другой ИИ-агент пытается найти несуществующую функцию и написать для неё патч. 4. Команда тратит вполне настоящее рабочее время. Походу, одного номера CVE и высокой оценки теперь недостаточно. Для свежих уязвимостей придётся проверять подтверждение от разработчиков проекта, ссылку на исправляющий коммит, затронутые версии и воспроизводимость PoC. Добро пожаловать в эпоху, когда security-сканеру тоже нужен фактчекинг 🙂 📎 Расследование JFrog: https://research.jfrog.com/post/sqlite-critical-cves-or-llm-slops/ 📎 Позиция SQLite: https://sqlite.org/cves.html
Почему этот бин вообще создался? Откуда приехало значение property? Кто съел все соединения из пула? И где мы опять поймали N+1?В такие моменты мы идём в логи, подключаем дебаггер и начинаем разбираться во внутренностях Spring. Ну или просто перезапускаем приложение, вдруг больше не повторится. Axelix появился как раз для таких расследований. Он подключается к работающим Spring Boot-приложениям и показывает, что происходит с бинами, конфигурацией, транзакциями, кэшами и scheduled-задачами. А ещё ищет известные проблемы и сомнительные настройки — те самые костыли, которые Spring-разработчики собирают в проде уже много лет. И вот теперь Axelix вышел в GA — состоялся релиз версии 1.0.0. До него были milestone-версии, которые успели попробовать несколько десятков команд. Исходный код проекта открыт под лицензией LGPL-3.0. Версию 1.0.0 уже можно использовать в продакшне, хотя разработчики советуют не спешить и для начала обкатать её на dev-окружении. Что, в общем-то, звучит разумно. Если хочется узнать, зачем появился Axelix и какой путь проект прошёл до первого стабильного релиза, об этом подробно рассказал Михаил Поливаха — технический лидер Axelix и эксперт Spring АйО. 📎 Мотивация создания продукта: https://habr.com/ru/companies/spring_aio/articles/1065202/ 📱 Канал Axelix: http://t.me/axelix_official 👩💻 Исходный код на GitHub: https://github.com/axelixlabs/axelix
KafkaTemplate.send()? Метод возвращает Future, ошибки обрабатываются в коллбэке, всё выглядит ок.
Но после сетевого сбоя приложение начинает бесконечно выбрасывать IllegalMonitorStateException, помогает только перезапуск.
В статье от нашего участника Spring АйО Академии, Евгения Рудикова, развернулся настоящий технический детектив: корутины, скрытая блокировка в Kafka Producer, вложенные synchronized, JIT-компиляция, CodeCache и баг OpenJDK. Разбираемся, как и в JVM могут быть баги, которые проявляются в определённых условиях, и почему библиотечный код стоит заранее считать потенциально блокирующим.
📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1064528/GET /orders?page=2&status=PAID&sort=createdAt,desc
Потом поиск усложняется. Появляются диапазоны дат, группы условий, вложенные фильтры. Query string постепенно превращается в плохо читаемый DSL. Заодно приходится учитывать ограничения на длину URI и то, что адрес запроса может попасть в логи.
Обычно в этот момент появляется такой эндпойнт:
POST /orders/search
Content-Type: application/json
{
"status": ["PAID", "SHIPPED"],
"createdAt": {
"from": "2026-06-01",
"to": "2026-06-30"
},
"customer": {
"country": "NL"
}
}
Решение рабочее. POST вообще не ограничен созданием ресурсов. Сервер может обрабатывать его тело по собственной семантике.
Проблема в другом: на уровне HTTP POST считается потенциально небезопасным и не идмептентным. Прокси, клиенты и другая инфраструктура не знают, что наш /search только читает данные. Такой запрос нельзя автоматически повторять или полноценно кэшировать без дополнительных договоренностей.
Передать тело в GET технически возможно. Но RFC 9110 говорит, что у содержимого GET-запроса нет общепринятой семантики. Некоторые серверы и промежуточные узлы могут отклонить такой запрос. Среди причин упоминаются даже атаки класса request smuggling.
В июне 2026 года IETF опубликовала RFC 10008 с новым методом QUERY:
QUERY /orders HTTP/1.1
Content-Type: application/json
Accept: application/json
{
"status": ["PAID", "SHIPPED"],
"total": {
"min": 100,
"max": 1000
}
}
QUERY предназначен для запросов, описание которых передается в теле. Формат может быть любым, если он обозначен через Content-Type: JSON, SQL, JSONPath или собственный язык фильтрации.
Спецификация закрепляет за QUERY три свойства:
- safe - клиент не запрашивает изменение состояния целевого ресурса
- idempotent - запрос можно безопасно повторить
- cacheable - ответ разрешено кэшировать
Для кэша есть отдельное правило: ключ должен учитывать тело запроса и связанные с ним метаданные. Поэтому существующие CDN и reverse proxy не начнут кэшировать QUERY сами по себе. Им потребуется поддержка нового метода.
QUERY также умеет работать с conditional requests. А сервер может сообщить о допустимых форматах через новый заголовок Accept-Query.
👩💻 Что со Spring?
В актуальном Spring Framework полноценной поддержки QUERY пока нет. Проблема находится именно на уровне фреймворка: в RequestMethod отсутствует такое значение, поэтому обычный @RequestMapping нельзя привязать к QUERY.
Обойти ограничение можно через functional endpoints, собственный HandlerMapping или ручную проверку метода. Для нового стандарта это слишком много самодельной инфраструктуры.
Сейчас открыт PR с поддержкой RFC 10008. Команда Spring рассчитывает подготовить ее к Spring Framework 7.1, который ожидается в ноябре 2026 года. Точная версия пока не гарантирована.
Так что переписывать все POST /search сегодня рано. Ждем нормальной поддержки в Spring, клиентах и прокси. Потом уже можно будет с чистой совестью бежать менять поисковые POST-запросы на QUERY.
RFC 10008:
https://www.rfc-editor.org/info/rfc10008/
Spring Framework PR:
https://github.com/spring-projects/spring-framework/pull/34993В OpenIDE появился встроенный DB-клиент для работы с базами данных прямо внутри IDE.Больше не нужно держать рядом DataGrip, DBeaver или pgAdmin — подключились один раз, и дальше работаете с базой там же, где пишете код. В первой версии доступны: – SQL-комплишн по схеме базы: подсказывает таблицы и колонки, ловит опечатки и синтаксические ошибки – Редактирование данных прямо в таблице: сортировка, фильтры, правка ячеек – Экспорт результата в CSV, JSON, SQL и XML – ER-диаграмма схемы базы: таблицы и связи между ними наглядно – EXPLAIN и анализ плана запроса Уже есть поддержка 5 наиболее популярных СУБД: PostgreSQL, MySQL, ClickHouse, SQLite и Oracle. Базовые возможности DB-клиента доступны в OpenIDE абсолютно бесплатно, полноценная поддержка всех 5 СУБД — в OpenIDE Pro.
☑️ «Что не так с вашим Spring AOP? Отвечает Axelix» Михаил Поливаха, технический руководитель проекта Axelix Разберемся, как связаны Spring AOP, проксирование и AspectJ и в каких случаях возможностей Spring уже недостаточно. ☑️ «Превратности DLT: как топик ошибок становится кладбищем бизнес-событий» Евгений Сулейманов, технический директор ProzyTech Обсудим, почему Dead Letter Topic без мониторинга и оповещений может привести к потере важных бизнес-событий. ☑️ «Эволюция ИИ-агентов. Как простой запрос превращается в полноценную архитектуру» Максим Александров, старший разработчик программного обеспечения Aston📅 22 июля, 18:00 по Москве 📍 Онлайн 🎯 Для специалистов любого уровня 🔗 Регистрация по ссылке
Внутри Broadcom сейчас активно происходит пересмотр портфеля Spring в целом. Например, проект Spring Cloud Data Flow полностью ушёл из Open Source, активно сворачивают поддержку Reactor-а. Марцин же, один из авторов Spring Cloud, покинул команду уже как год, наверное. Посмотрим, что будет с проектом далее. Тем не менее, без активной поддержки сообщества будет непросто.Spring Cloud Contract заканчивается. Stubborn Contract только начинается
Разберемся, как связаны Spring AOP, проксирование и AspectJ и в каких случаях возможностей Spring уже недостаточно.☑️ «Превратности DLT: как топик ошибок становится кладбищем бизнес-событий» Евгений Сулейманов, технический директор ProzyTech
Обсудим, почему Dead Letter Topic без мониторинга и оповещений может привести к потере важных бизнес-событий.☑️ «Эволюция ИИ-агентов. Как простой запрос превращается в полноценную архитектуру» Максим Александров, старший разработчик программного обеспечения Aston
Проследим путь от обычного текстового запроса до полноценной агентной системы с памятью, контекстом, управлением состоянием и планированием.📅 22 июля, 18:00 по Москве 📍 Онлайн 🎯 Для специалистов любого уровня 🔗 Регистрация по ссылке До встречи на митапе!
List или Set в entity, и живи спокойно. А потом на проде внезапно появляется пачка странных DELETE/INSERT, транзакция тяжелеет, и кто-то обязательно говорит: «Ну это же Hibernate, он такой». Звучит удобно. Только вот удобство это обычно маскирует другое: вы сами сказали ORM одно, а ожидали совсем другое.
Использование List и Set для Hibernate это особый сигнал. И от того, какой сигнал вы подали, зависит и SQL, и то, поедет ли у вас Lazy Loading в самый неподходящий момент. Иногда разница выглядит мелкой, но она крайне важна.
Если вы хотите не очередной свод правил «делайте так, потому что так принято», а понять, почему ответ именно такой, заходите. Разберёмся без магии и без списания вины на Hibernate.
P.S: Данную статью мы написали по мотивам вопросов, возникших у участников Spring АйО Академии. Спасибо всем тем, кто учавствовал в первом потоке!
📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1059922/