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
显示更多📈 Telegram 频道 Spring АйО 的分析概览
频道 Spring АйО (@spring_aio) 是活跃参与者。目前社区聚集了 10 908 名订阅者,在 技术与应用 类别中位列第 10 993,并在 俄罗斯 地区排名第 58 713 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 10 908 名订阅者。
根据 02 九月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -3,过去 24 小时变化为 -5,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 50.30%。内容发布后 24 小时内通常能获得 24.28% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 5 487 次浏览,首日通常累积 2 648 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 53。
- 主题关注点: 内容集中在 айо, хабр, 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”
凭借高频更新(最新数据采集于 03 九月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
We noticed that the JAXB message converter can consume a lot of CPU resources at runtime, even if XML isn't being used by the application.В любом случае автоматическое определение компонентов не бесплатно само по себе. Это: - дополнительные проверки при старте; - лишняя работа ClassLoader; - расход CPU; - усложнение процесса инициализации. По отдельности это мелочи. Но именно из таких мелочей складывается время запуска современных приложений. Раньше фреймворк старался угадать, что может понадобиться разработчику. Теперь всё чаще действует другой принцип:
Не делай ничего, пока тебя об этом явно не попросили.И, кажется, это правильно. 🔗 Источник: Spring Framework 7.1 Release Notes https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-7.1-Release-Notes
Возможно ли, каким-то образом, обнаружить в процессе тестирования, что Hibernate под капотом делает что-то страшное?На деле вопрос очень интересный и практичный. Мы решили оформить его в небольшую статью в виде размышлений о том, какие вещи, в теории, можно попробовать. Данная статья не является исчерпывающим материалом, а больше аккамулирует опыт и рассказывает - что, на практике, имеет смысл, а что не очень. На деле, одними тестами тут обойтись будет тяжело. Лучше всего использовать комбинированный подход. 😎 Приятного чтения! 📎 Статья на Хабр: https://habr.com/ru/companies/spring_aio/articles/1068176/
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 только начинается
