TGViewer
Channel Public Channel
Spring АйО

Spring АйО

@spring_aio

Русскоязычное сообщество Spring-разработчиков.

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

Чат для общения: @spring_aio_chat
По вопросам сотрудничества: @befayer
Subscribers
10.9K
Photos
534
Videos
323
Links
707

Showing posts older than #1110 · Back to latest

Older Posts 20 shown
Post #1109 6.41K
🍃 Агенты портят архитектуру, IDE не нужна, Spotify не стал лучше | Spring АйО Подкаст №67

😉 СМОТРЕТЬ НА YOUTUBE
😄 Чуть позже...
🥰 СМОТРЕТЬ НА RUTUBE
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
🤩 СЛУШАТЬ НА SPOTIFY
🤩 СЛУШАТЬ НА APPLE PODCASTS

💬 Аудио версию подкаста можно найти в комментариях
  • ❤ 9
  • 🔥 6
  • ⚡ 5
  • 😁 2
Post #1108 6.12K

Forwarded from OpenIDE – мультиязычная среда разработки

⚡️ OpenIDE Pro теперь доступна всем

Java, Kotlin, Go, TypeScript, JavaScript, Python, PHP и встроенный DB-клиент в одном дистрибутиве!

Все пользователи OpenIDE могут перейти на OpenIDE Pro без регистрации, без NDA и без каких-либо ограничений.

60 дневный триальный период OpenIDE Pro включает в себя:

1. Полноценную поддержку Spring
2. Расширенную поддержку Go (с отладкой и профилированием)
3. Полный доступ к инструментам для работы с БД (PostgreSQL, MySQL, ClickHouse, Oracle)
4. Поддержку JavaScript/TypeScript вместе с React/Angular/Vue
5. Инструменты для работы с Python и PHP


Также доступны бесплатные пилоты для корпоративных клиентов с раширенным триальным периодом. Достаточно просто оставить заявку через форму.

Скачать: https://openide.ru/download

📚 Подробнее про OpenIDE Pro читайте в релизной статье на Хабре
  • ❤ 35
  • 🔥 21
  • 👍 8
  • 😁 3
  • 🤔 3
  • ⚡ 2
  • 🤩 1
Post #1107 6.29K
🐘 Тестовые фикстуры: управление зависимостями в Gradle

В многомодульных Gradle-проектах рано или поздно появляются вспомогательные классы для тестов: фабрики тестовых данных, билдеры, хелперы. Такие классы не относятся ни к продакшн-коду, ни к обычным тестам. Логично было бы переиспользовать их сразу в нескольких модулях, но классическая модель Gradle этого не позволяет: тестовые артефакты одного проекта нельзя просто так подключить как зависимость в другом.

На самом деле Gradle умеет решать эту задачу из коробки без вспомогательных проектов и хитрых конфигураций. Начиная с версии 5.6, тестовые фикстуры стали в Gradle полноценной сущностью первого класса, и весь этот пласт боли можно убрать буквально несколькими строчками в build.gradle.

Плагин java-test-fixtures заводит в модуле отдельный SourceSet, а другие модули подключают эти классы через лаконичный DSL. При публикации Gradle даже собирает отдельный *-test-fixtures.jar для независимых проектов. В статье на примерах показано, как расшарить тестовые хелперы между модулями, избавиться от дублирования и при этом сохранить чистые архитектурные границы. Если вы устали таскать тестовый код из модуля в модуль, то Вам точно пригодится.

📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1059130/
  • 🔥 17
  • ❤ 8
  • 👍 7
  • ⚡ 1
Post #1106 6.02K
🏋️ Масштабирование Java-систем реального времени

Событийно-ориентированная архитектура красиво выглядит на схеме — пока не встречается с требованиями реального времени.

В статье разбирается опыт масштабирования Java-платформы контакт-центра: почему локальные кеши начали расходиться, как повторное воспроизведение Kafka-событий почти сделало бесполезным автомасштабирование, откуда взялось получасовое отставание потребителей и почему часть критических путей пришлось вернуть к синхронному взаимодействию.

Без войны с Kafka и без универсальных рецептов — только архитектурные компромиссы, которые становятся видны под рабочей нагрузкой.

📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1058484/
  • 👍 11
  • 🔥 8
  • ❤ 4
  • 😁 3
  • 🤔 3
  • 🤯 1
Post #1105 7.5K
🦎 Самокорректирующийся структурированный вывод в Spring AI 2.0

Софту всё чаще приходится интегрироваться с LLM. И тут быстро всплывает неприятная деталь: модели хорошо пишут текст, но не всегда стабильно возвращают данные в строгой структуре.

Даже если явно попросить ответ по JSON Schema, модель может добавить пояснение, пропустить поле или вернуть не тот тип. Нативный structured output у части провайдеров есть, но он работает не везде и не одинаково.

В статье Кристиан Тцолов, лидер Spring AI, разбирает, как в Spring AI 2.0 решается эта проблема.

📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1057472/
  • 🔥 14
  • ❤ 11
  • 👍 8
Post #1104 7.52K
🤚 Reflection тормозит

Сколько раз вы слышали тезис о том, что в Java Reflection тормозит, и лучше его избегать. Насколько это правда?

С одной стороны, JMH benchmark на коленке, написанный на Java 17 говорит - деградация по сравнению с прямым вызовом есть, примерно 20-25%. Так в чём же дело?

На практике, на performance reflection-а влияет множество вещей:

- Проверки на доступ (Известный setAccessible)
- Возможности инлайнинга методов JIT-ом
- Необходимый Boxing/Unboxing в силу сигнатуры Method#invoke() и т.д.

В статье от Бена Эванса, писателя и jvm-инженера, рассказывается о том, почему производительность reflection-а имела проблемы. Однако в Java 18 reflection начал использовать MethodHandles и это многое поменяло.

P.S: Если будет интересно, пишите, обязательно расскажем и про MethodHandles.

📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1056734/
  • 👍 32
  • 🔥 12
  • ⚡ 9
  • ❤ 3
  • 🤯 2
Post #1103 7.51K
👩‍💻 Spring теперь не тормозит старт приложения из-за тяжелых бинов

Одна из старых и вполне понятных особенностей Spring в том, что singleton бины во время ApplicationContext refresh создаются синхронно. Контейнер идет по цепочке последовательно: создал бин, внедрил зависимости, выполнил init-логику, пометил как готовый, пошел дальше.

Модель надежная, но дорогая по времени. Если в этой цепочке оказывается бин, который на старте прогревает кеш, тянет данные, готовит внешние ресурсы или делает что-то вычислительно тяжелое, он начинает тормозить не только себя, а весь startup целиком. Даже если этот бин не критичен для первых секунд жизни приложения, контекст все равно вынужден его ждать.

💡 Теперь для таких сценариев, начиная со Spring 6.2 есть background initialization.

Можно указать @Bean(bootstrap = Bean.Bootstrap.BACKGROUND), благодаря которой можно пометить конкретный бин так, чтобы Spring инициализировал его в фоне, а основной поток не стоял на месте и продолжал поднимать остальной контекст. Тяжелый бин больше не тормозит весь context refresh.

⚠️ Для инициализации в бекграунде нужен bootstrapExecutor (по-умолчанию, Spring Boot принесёт его самостоятельно).

Но тут очень важно понимать, как это работает. Комментарий от Михаила:

Работает эта история таким образом - в injection point-ах, где нужен bean, кладётся proxy. Тем самым удовлетворяется зависимость. И вот тут крайне важно - если на этом proxy будет вызов метода, то он будет заблокирован до тех пор, пока реальный ваш bean не инициализируется. В данном случае это похоже на динамику работы Lazy, но не на declaration site-е, а на injection point-е.

И ещё вот что важно: даже если вы отдали инициализацию бина в background, Spring Boot не завершит фазу refresh-а до тех пор, пока не встанет этот ваш бин. Это важно, чтобы потенциально сломанное приложение не начало serve-ить трафик.

Есть очень хороший доклад от Juergen Hoeller-а, который он давал в Барселоне в 2025г, посмотрите его. У вас прямо много вещей встанет в голове в нужные места.


Если подытожить, Spring теперь позволяет не блокировать весь startup на тяжелых, но не критичных бинах, при этом не ломая lifecycle и dependency guarantees.
  • 👍 45
  • 🔥 12
  • ❤ 6
  • ⚡ 5
Post #1102 6.82K

Forwarded from OpenIDE – мультиязычная среда разработки

"IDE больше не нужна. Агенты её убили" — всё чаще слышно из каждого утюга.

Может, для людей и правда убили*. А агенты ей пользуются прекрасно, и им нужны ровно те же тулы, которыми раньше пользовались разработчики: поиск по структуре проекта, данные о покрытии тестами, профилировщик.

JetBrains проверили это на трёх кейсах:

1. Встроенный поиск IDE вместо grep — минус 13,48% токенов на Kotlin-проекте, качество то же
2. Skill, который находит нужный тестовый файл по данным о покрытии — экономия токенов до 50%
3. Анализ снапшотов dotTrace вместо разбора кода вслепую — точность диагностики выросла с 4,71 до 8,15 из 10, а на сложных багах вроде зависшего UI — с 1,6 до 10

Как считали и что дальше — в статье на Habr: https://habr.com/ru/companies/haulmont/articles/1054434

* P.S. Несмотря на этот тезис, мы всё ещё не знаем ни одного разработчика, который удалил бы IDE с компа. Вот и думайте!
  • 🔥 20
  • 👍 9
  • 🤔 4
  • ❤ 2
  • 😁 2
Post #1101 6.92K
☠️ CLA или почему ваш PR в Open Source не может быть принят

Какое-то время назад мы выпускали статью о том, что представляет собой Copyright и Software License, какие они бывают и т.д.

Настало время выпустить небольшое продолжение, где мы рассмотрим другие легальные аспекты разработки софта:

- Как на Copyright влияет использование AI?
- Что такое CLA и когда без него нельзя?
- От чего на самом деле спасает CLA, а где лицензии достаточно?

На примерах разных проектов постараемся ответить на эти вопросы.

🔗 Подробности в статье: https://habr.com/ru/companies/spring_aio/articles/1055250/
  • ❤ 10
  • 🔥 6
  • 👍 4
  • ⚡ 1
Post #1100 7.36K
🍃 AI мигрирует Python на Spring Boot, MongoDB ещё жива, SpringBatch 4 закончился | Spring АйО Подкаст №66

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

💬 Аудио версию подкаста можно найти в комментариях
  • 👍 10
  • 🔥 7
  • ❤ 4
Post #1099 7.81K
🤑 В Java нет универсального типа для денег

double быстрый, но хранит десятичные числа как двоичные приближения: 0.1 + 0.2 дает 0.30000000000000004. BigDecimal точен в десятичной арифметике, но дороже по памяти и CPU.

Выбор зависит от задачи: для метрик и ML хватит double с допуском, для налогов и счетов нужен BigDecimal с явным RoundingMode, для низкой latency - fixed-point на long.

Ошибка не в double или BigDecimal, а в выборе без понимания точности, округления и нагрузки.

🔗 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1054074/
  • 👍 27
  • 😁 14
  • ❤ 4
  • 🔥 2
Post #1098 7.1K

Forwarded from Amplicode – ускоряем разработку на Spring

⚡ Skill of the Week: Spring Data JDBC

Продолжаем рубрику Skill of the Week: каждую неделю разбираем скилл, который помогает вам и AI-агентам в реальной работе.

Spring Data JDBC — сознательно простой стек: агрегаты в духе DDD, загрузил корень целиком, изменил, сохранил. Казалось бы, чем проще технология, тем легче с ней агенту.

Так ли это на практике? Скорее наоборот.

Кода с Spring Data JDBC в открытом доступе мало, и модели приходится достраивать поведение фреймворка по своим общим представлениям. Итог: агент ссылается на внутренний компонент чужого агрегата, заводит репозиторий для владеемой сущности и нарушает границы там, где этого делать нельзя 🫠.


Skill объясняет агенту, как Spring Data JDBC устроен на самом деле: что такое агрегат, где проходит его граница и почему репозиторий бывает только у корня. Для моделей среднего класса это критично (на отдельных задачах скилл подтягивает Haiku почти до уровня Opus!).

Этому и посвящён скилл недели.

📚 Как научить агента мыслить агрегатами разобрали в статье на Хабре
  • 👍 22
  • ❤ 15
  • 🔥 11
  • ⚡ 2
Post #1097 5.99K
Друзья, всем привет!

Недавно эксперт сообщества, Михаил Поливаха, выступил на подкасте "Тысяча Фичей" Александра Пахомова, спикера Jpoint.

Парни поговорили о наболевшем:

1. Почему Java до сих пор плотно держит Enterprise и на цифрах не сдает позиции.
2. Почему Oracle отказался от своего Enterprise Edition для Java.
3. Когда Spring Framework придёт конец и придёт ли вообще.
4. Когда нужно и не нужно использовать AI.
5. Как сохранить экспертизу и глубокое понимание в эру искусственного интелекта.

Подкаст довольно длинный, и все темы удалось разобрать довольно глубоко.

Слушать в Apple Podcasts | Spotify | Яндекс | браузер

Ссылка на канал Александра

Надеемся, Вам будет интересно! 🫡
  • 🔥 32
  • ❤ 7
  • 👍 5
Post #1095 6.74K
👩‍💻 Spring Batch научился работать с MongoDB

Spring Batch - проект в рамках экосистемы Spring Framework, который, как правило не получает должного внимания. Тем не менее, это хорошее решение для Enterprise Batch Processing.

Долгое время Spring Batch требовал SQL-базу для хранения общего состояния, шагов перехода, статусов выполнения и время запусков. Даже если проект жил на MongoDB, рядом часто приходилось держать Postgres или MySQL только ради метаданных.

В Spring Boot 4.1 стало проще: появился spring-boot-starter-batch-data-mongodb. Теперь Spring Batch научился работать с MongoDB.

В статье Josh Long рассказывает про новинки в рамках Spring Batch, в том числе и новую интеграцию с MongoDB, а также работу с GraalVM

📎 Полный текст: https://habr.com/ru/companies/spring_aio/articles/1052358/
  • 👍 16
  • ❤ 10
  • 🔥 7
Post #1094 7.43K
👩‍💻 Большая сила маленьких PR-ов в эру AI

Эра AI-агентов изменила разработку до неузнаваемости: кода стало больше, а скорость, с которой он попадает в репозиторий, выросла кратно. Вместе с этим встаёт честный вопрос — как не дать этой скорости размыть качество кодовой базы? Ведь сгенерировать тысячу строк сегодня проще, чем когда-либо, а вот удержать архитектурную целостность — нет.

И тут обнаруживается узкое место, о котором редко говорят вслух. Финальное решение о том, как изменение вписывается в проект, по-прежнему принимает человек на code review — и именно это ревью становится той точкой, где качество либо сохраняется, либо незаметно утекает. Проблема в том, что у человеческого внимания есть предел, и большие изменения пробивают его слишком легко.

В этой статье я расскажу, как мы в Axelix подошли к этой проблеме на уровне процесса и CI, какие возражения от команды при этом неизбежно всплывают и почему они не выдерживают проверки практикой. А ещё разберём угловые случаи, которые ломают любое красивое правило в реальной жизни, — и что мы с ними делаем.

📎 Подробнее в статье на Хабр:
https://habr.com/ru/companies/spring_aio/articles/1051808/
  • ❤ 14
  • 👍 8
  • 🔥 4
  • 🤩 4
  • 😁 1
Post #1093 6.57K
Наши друзья из Axiom проводят вебинар для тех, кто сталкивается с Java, Kubernetes и всем, что связано с защищённым контуром.

Ребята обещают показать самый что ни на есть практический сценарий: Java-сервисы внутри Kubernetes, mTLS, ГОСТ TLS, Axiom JDK Certified и КриптоПро/JTLS. В общем самая жиза.

Будет разбор:
• зачем сервисам сертификаты;
• как работает mTLS;
• где в этой схеме Axiom JDK Certified и КриптоПро;
• почему не надо хранить ключи в container image;
• как network policies помогают не превращать кластер в проходной двор.

👆Спикер — Дмитрий Сапожников.
❓30 июня в 11:00

Если тема вам близка, регаться тут
  • 👍 11
  • ❤ 4
  • 🔥 3
Post #1092 6.93K
🛡 Project Valhalla: 10 спустя

В Java наконец появляется ответ на старую проблему: полноценные классы часто слишком дорогие для памяти и процессора.

Пример - массив из миллиона, например, точек 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/
  • 👍 38
  • 🔥 27
  • ❤ 11
Post #1091 6.92K
😵‍💫 Когда Hibernate плевать на ваш OneToOne Lazy Loading

Вы аккуратно расставили 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/
  • 🔥 32
  • 👍 18
  • ❤ 5
  • 🤩 1
Post #1090 6.58K
🍃 Spring AI 2.0, Anthropic спрятал бомбу, Геттеры опасны | Spring АйО Подкаст №65

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

💬 Аудио версию подкаста можно найти в комментариях
  • 🔥 17
  • ❤ 8
  • 👍 7
  • 😁 4
Post #1089 6.44K
Привет, Друзья!

Эксперт нашего сообщества, Евгений Сулейманов, проводит опрос зрелости Production систем. Опрос довольно небольшой, и Spring АйО просит Вас пройти его с целью того, чтобы понять, как эксплуатируются современные системы.

Опрос довольно небольшой, агрегированные и обезличенные результаты потом опубликуем.

Евгений Сулейманов:

Запускаю 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
  • 👍 10
  • ❤ 8
  • 😁 5
  • 👌 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →