home.social

#spring_framework — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #spring_framework, aggregated by home.social.

fetched live
  1. [Перевод] Отслеживание запуска приложения в Spring

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

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework

  2. "__TypeId__": как один Kafka-заголовок незаметно связывает микросервисы именами Java-классов

    Если два сервиса обмениваются JSON, но один из них не может десериализовать сообщение без знания полного имени Java-класса другого сервиса - значит, транспортный контракт зависит не только от данных, но и от реализации. Звучит как теория? Увы, но это суровая практика Spring Kafka, с которой многие разработчики имеют дело каждый день. Вы пишете сервис A, сериализуете объект в JSON, отправляете в kafka-топик. Консьюмер сервиса B, который понятия не имеет о существовании класса com.company.a.event.UserEvent , должен бы прочитать JSON по структуре полей - ведь это же просто данные, верно? Но нет. JsonDeserializer по умолчанию смотрит в заголовок TypeId , видит там полное имя класса отправителя и пытается выполнить Class.forName() . Класса нет - контейнер падает. Ваш независимый сервис внезапно стал зависимым от classpath источника запроса. Приглашаю разобраться, как возникла эта проблема и как из неё выбраться, не затаскивая общую DTO-библиотеку в каждый микросервис. Техническая оговорка: в это статье рассматривается конкретика про JsonSerializer / JsonDeserializer в Spring Kafka. На Avro/Protobuf со Schema Registry эта проблема не воспроизводится - там контракт вынесен в схему, и имя Java-класса просто не играет роли.

    habr.com/ru/articles/1065138/

    #Java #spring_framework #kafka #микросервисы #__TypeId__ #TYPE_MAPPINGS #JsonSerializer #JsonDeserializer

  3. [Перевод] Самокорректирующийся структурированный вывод в Spring AI 2.0

    Софту всё чаще приходится интегрироваться с LLM. И тут быстро всплывает неприятная деталь: модели хорошо пишут текст, но не всегда стабильно возвращают данные в строгой структуре. Даже если явно попросить ответ по JSON Schema, модель может добавить пояснение, пропустить поле или вернуть не тот тип. Нативный structured output у части провайдеров есть, но он работает не везде и не одинаково. В новом переводе от команды Spring АйО разбираем, как в Spring AI 2.0 решается эта проблема.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_ai #ai #spring_framework

  4. [Перевод] 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

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #mongodb

  5. [Перевод] Проблема фантомной записи: почему ваша реализация идемпотентности незаметно теряет данные

    В проде бывает так, что одна и та же операция часто повторяется : клиент не дождался ответа и ретраит, балансер порвал соединение, очередь переиграла сообщение. Вспоминаем про идемпотентность - это правило «повтор не должен создавать новый платёж/заказ». Чтобы отличать повтор от новой операции, используют idempotency key (ключ идемпотентности) . Это обычная уникальная строка-идентификатор, которую клиент или апстрим отправляет вместе с запросом (часто в заголовке Idempotency-Key ). Сервис сохраняет этот ключ у себя и связывает с результатом операции. Далее приходит запрос с тем же ключом - сервис не выполняет бизнес-действие второй раз, а дедуплицирует на основе ключа идемпотентности. Но так ли всё просто? Многолетний опыт анализа инцидентов показал, что на практике большое количество систем всё же регулярно допускают дублирования, хотя делали всё по методичке. В новом переводе от команды Spring АйО рассмотрим не самые очевидные ошибки и то, о чём стоит подумать, при реализации идемпотентного API.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data

  6. Axelix. Cпецназ для Вашей Spring Boot экосистемы

    Привет, Хабр! Меня зовут Михаил Поливаха. Я думаю, что в Хабе Spring АйО меня уже относительно знают. В рамках Spring АйО мы довольно часто занимаемся подбором технического материала и его ревью. Сам же я довольно регулярно выступаю на конференциях, контрибьючу в Open Source и т.д. Также, часто наши материалы крутятся вокруг Java разработки и конечно же Spring-а. И данной пост, хоть и будет с одной стороны сильно связан с Java и Spring Framework, но, тем не менее, не похож на остальные. На днях произошло довольно знаковое событие. Мы с небольшой командой примерно год писали инструмент, который призван существенно упростить весь процесс отладки, тестирования и мониторинга Spring Boot приложений в production. И вот этот проект наконец-то получил первый Milestone Релиз. Проект называется Axelix .

    habr.com/ru/companies/spring_a

    #spring #spring_boot #axelix #opensource #spring_framework

  7. [Перевод] Соль и перец в безопасности паролей

    Безопасность данных сегодня стала главным приоритетом для любого веб-ресурса. Базовым стандартом защиты учетных записей является хеширование паролей. Этот процесс превращает конфиденциальные символы в необратимый код. Без него утечка базы данных мгновенно скомпрометирует пользователей. Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа. Эта статья поможет вам разобраться в эволюции методов криптографической защиты. Вы узнаете, как правильно комбинировать эти инструменты для надежной аутентификации.

    habr.com/ru/companies/spring_a

    #java #kotlin #hash #cryptography #spring #spring_boot #spring_framework #spring_security #security #password

  8. [Перевод] Эволюция API без боли: ArchUnit, Gradle и правила для библиотек

    В Netflix тысячи Java-репозиториев. Когда в библиотеку вносят изменение, часть пользователей может перестать собираться или начать работать некорректно. Чаще всгео эта проблема возникает потому, что public контракты являются public только для авторов библиотеки, а не для пользователей. С новом переводе от команды Spring АйО разбираемся, как ребята из Netflix ввели простые метки для API: @Public - можно использовать снаружи, @Experimental - тоже можно, но интерфейс может меняться, @Deprecated - готовится к удалению. Все остальное считается внутренним и использованию извне не подлежит. Но сами аннотации проблему не решают, нужна проверка на масштабе. Решение - ArchUnit + Nebula ArchRules. ArchUnit анализирует скомпилированный байткод, поэтому одинаково работает для Java/Kotlin/Scala и проверяет реальный код на classpath. Команды пишут правила (например: «вне пакета библиотеки нельзя зависеть от ее deprecated/internal API»), публикуют их как отдельный arch-rules JAR, а runner автоматически запускает проверки в репозиториях и делает отчеты с точной строкой нарушения.

    habr.com/ru/companies/spring_a

    #java #kotlin #api #versioning #neflix #spring #spring_boot #spring_framework #springboot

  9. [Перевод] Команда Spring о Spring Framework 7 и Spring Boot 4

    В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема. Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет. Spring Framework 7 тащит core resilience в ядро: RetryTemplate , @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #ai #agents

  10. Веселимся со Spring: pet-проект по распознаванию речи

    Не писал на Spring уже лет 8 и решил по фану написать мини пет проект с api и распознаванием речи. Звучит круто, лет 8-10 назад это заняло бы … вечность, тогда и llm, достаточно качественно распознающих русскую речь, да еще на скромном домашнем пк не было. В общем решил в выходной повеселиться. Погнали веселиться

    habr.com/ru/articles/1033338/

    #Java #Spring_Framework #Vosk #speech_recognition #распознавание_речи #REST_API #WAV #Java_Sound_API #pet_project #веселье

  11. [Перевод] Самый простой способ устроить утечку памяти в Java

    В новом переводе от команды Spring АйО рассмотрим утечки памяти в Java. Не секрет, что GC освобождает только недостижимые объекты. Утечка в Java начинается там, где объект уже не нужен, но на него все еще есть цепочка ссылок от живого потока. Симптомы обычно одинаковые: куча растет, GC срабатывает чаще, паузы увеличиваются, финал - java.lang.OutOfMemoryError: Java heap space . В целом вывод такой, что нужно смотреть график heap в VisualVM/JVisualVM/JConsole, снимать heap dump (jmap), в Eclipse MAT запускать Leak Suspects и проверять цепочки удерживающих ссылок.

    habr.com/ru/companies/spring_a

    #java #kotlin #performance #spring #jdk #gc #spring_boot #spring_framework #springboot

  12. [Перевод] Раздувание памяти JDK 17 в контейнерах: разбор инцидента

    В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент. Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы. Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

    habr.com/ru/companies/spring_a

    #jdk_17 #jdk #java #performance #gc #kot #memory #spring #spring_boot #spring_framework

  13. [Перевод] OpenTelemetry со Spring Boot

    В новом переводе от команды Spring АйО смотрим, как подружить современный Spring Boot и OpenTelemetry так, чтобы данные уходили по OTLP в любой совместимый бэкенд. В экосистеме Spring большая часть телеметрии была завязана на Micrometer Project (Был ещё spring-cloud-sleuth если кто помнит). Но полноценного all-in-one решения для того, чтобы Spring Boot приложение просто начало экспортировать телеметрию по OTLP не было. До Spring Boot 4. На данный момент для интеграции OTel в Spring Boot приложения есть 3 пути: Java Agent (минимум кода, но чувствителен к версиям и может конфликтовать с другими агентами), сторонний OTel starter (стартер от самих OpenTelemetry, но тянет alpha-зависимости) и новый spring-boot-starter-opentelemetry , доступный в Spring Boot 4.0. Про него и будет речь.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #opentelemetry #performance #springboot #spring_framework #spring_boot

  14. [Перевод] Spring Data. На пути к более строгой типизации

    В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data даёт более лёгкую и естественную альтернативу без лишней инфраструктуры сборки.

    habr.com/ru/companies/spring_a

    #spring #spring_data #spring_boot #spring_framework #java #kotlin #jooq

  15. Уязвимости в Spring AI и ONNX: как дыры в ИИ‑фреймворках превращаются в утечки данных и чужие модели

    ИИ‑фреймворки давно въехали в прод, но к ним часто относятся как к «научной приблуде», а не к ещё одному входу в ваши данные и инфраструктуру. Spring AI и ONNX крутятся где‑то между ML‑командами, продуктами вендоров и внутренними ассистентами, и на определённом этапе за ними перестают успевать архитектура и безопасность. В марте в обзорах уязвимостей рядом всплыли несколько критичных багов именно в этих штуках. Там есть и SQL‑инъекции, и JSONPath‑инъекции, и обход проверки доверия при загрузке моделей. В статье разбираю, что это значит для тех, кто уже тащит ИИ в прод, и даю чек‑лист, который можно прямо отнести своей команде.

    habr.com/ru/articles/1014606/

    #onnx #spring #spring_framework #spring_security #cve #vulnerability #vulnerability_management #уязвимости #уязвимости_и_их_эксплуатация #уязвимость_нулевого_дня

  16. [Перевод] О размерах пула соединений

    Настройка пула соединений — то, в чём разработчики часто ошибаются. При конфигурировании пула есть несколько принципов, которые некоторым могут показаться неочевидными, и их нужно понимать. Подробнее в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #connection_pool #system_design #system_development #system_designer #spring #spring_boot #spring_framework #postgres

  17. conditionals-spring-boot: расширяем возможности @Conditional

    Написал небольшую библиотеку для Spring Boot, которая добавляет типизированные @Conditional -аннотации для работы с конфигурацией через Environment...

    habr.com/ru/articles/1008018/

    #java #spring #spring_boot #spring_framework #springboot #configuration #configuration_management

  18. [Перевод] Ceylon и NULL: как сделать null нормальным

    В одном и том же null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения. В Ceylon эту проблему решают через типовую систему, через Union типы. Подробнее, в переводе от Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #ceylon #jvm #spring #spring_boot #spring_framework

  19. [Перевод] Руководство по ArchUnit — как модульно тестировать архитектуру

    Соблюдение определённой структуры пакетов или архитектуры крайне важно. Особенно в Java, где для корректной работы некоторые элементы должны быть public или действительно доступны за пределами своего пакета. В новом переводе от команды Spring АйО рассмотрим библиотеку с открытым исходным кодом ArchUnit, которая помогает в тех случаях, когда одного компилятора недостаточно.

    habr.com/ru/companies/spring_a

    #java #kotlin #archunit #тестирование #testing #test #spring #spring_boot #spring_framework

  20. [Перевод] Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)

    Records, pattern matching и sealed-типы сделали Java куда более «функциональной» — читать вложенные данные стало легко и красиво. Но как только вам нужно изменить что-то глубоко внутри неизменяемой структуры, начинается боль: каскад пересоздания records, копирование полей, десятки строк ради одного изменения. В новом переводе от команды Spring АйО рассмотрим, почему у современной Java всё ещё есть пробел в истории неизменяемости — и как оптики закрывают его. Если pattern matching — это про элегантное чтение , то оптики дают то, чего так не хватает, — композиционную запись : определили путь один раз и дальше меняете вложенные поля одной строкой, без ручной реконструкции и без циклов.

    habr.com/ru/companies/spring_a

    #java #kotlin #jvm #optics #java_core #spring #spring_framework #spring_boot

  21. [Перевод] Программирование, ориентированное на данные, для Java: за пределами record-классов

    Record-классы удобны, пока класс = «состояние, всё состояние и ничего кроме». Любое отклонение (API канонического конутруктора не равно внутреннему представлению, нужно наследование) ломает «автогенерацию» и паттерн-деструктурирование (destructuring). В новом переводе от команды Spring АйО статьи Brian`а Goetz`а, архитектора Java Language, предлагается следующий шаг в направлении data-oriented programming in Java: классы-носители и интерфейсы-носители (они же Carrier classes & interfaces). Концептуально, carrier классы родились из record-ов путем ослабления части их ограничений. Комментарий от Михаила Поливаха : Друзья, помните, пожалуйста, что данная статья по сути является суммированием обсуждения Carrier классов из JDK Project Amber Mailing List. Я это к тому, что пока непонятно, в какой версии языка carrier классы появятся, и появятся ли они в том виде, в котором представлены в статье. Статью стоит рассматривать как пищу для размышления.

    habr.com/ru/companies/spring_a

    #java #jvm #kotlin #jvm_options #jvm_hacks #spring #spring_boot #spring_framework

  22. [Перевод] HotSpot AOT-кэш: стартуем быстрее, греемся меньше

    В новом переводе от команды Spring АйО рассмотрим, как можно ускорить Java-приложения без переписываний: в свежих JDK появились Ahead-of-Time оптимизации кэша, которые выносят «дорогие» этапы загрузки/линковки классов (и даже частично профилирование методов) из рантайма в заранее подготовленный артефакт. Рассмотрим как устроен AOT-кэш в JDK 24–26, какие есть workflow (3 шага vs 2 шага/в один прогон), где прячутся подводные камни вроде удвоения требований по памяти при - XX:AOTCacheOutput , и какие практики обучения помогут реально сократить время старта и быстрее выйти на пик производительности.

    habr.com/ru/companies/spring_a

    #java #kotlin #jvm #aot #cache #cachecontrol #spring #spring_boot #spring_framework #springboot

  23. История одного безальтернативного переезда

    Всем привет! Сегодня я расскажу, как мы переводили наши Java-команды на новые рельсы. Проблема: В прошлом год стало ясно, что покупать лицензии Intellij IDEA проблематично. Предложения с ресурсов вроде «Авито»выглядели сомнительно и небезопасно. И российский рынок разработки очень плотно занялся переездом на свои решения, заказчики требовали использовать сертифицированное по местным реалиям ПО и все такое прочее. О переезде на новую среду не говорил разве что кто-то совсем уж ленивый. С чего мы начали: Изучив заново рынок, мы (я и другие лиды, которым на плечи легла эта ноша) стали анализировать доступные решения. Пишем мы чаще всего, используя Spring Framework и технологии около него, хотя иногда и вынуждены адаптироваться к конкретным пожеланиям заказчика и рекомендуемым им технологиям. Но фокус-группа акцентировала внимание вокруг Spring.

    habr.com/ru/companies/reksoft/

    #springboot #spring #spring_framework #kubernetes #helm #devops #jetbrains #gigaide #gigacode #openide

  24. Разработка приложения на Spring Boot, Java, База данных, профиль пользователя. Часть 2

    Всех приветствую! В прошлый раз я не указал важный аспект: на данном этапе проект - это монолит. Однако архитектура закладывается с учетом того, что в будущем систему можно будет разнести на разные серверы. Хочу поблагодарить пользователей за конструктивную критику в комментариях. В частности, @aleksandy верно подметил использование LocalDateTime вместо Instant. Повторюсь: на этапе прототипирования это осознанный выбор для удобства отладки и прямого контроля данных в БД "глазами", без конвертации часовых поясов в уме. Переход на Instant - это стандарт для продакшена, и он заложен в план развития. Также коснулись темы equals() и hashCode(). В текущей реализации я использую getClass(). Знаю, что это не учитывает работу Hibernate Proxy (когда вместо реального объекта мы получаем его обертку-пустышку для ленивой загрузки). На текущей "плоской" структуре данных это не критично, но как только мы перейдем к сложным связям, будет рефакторинг этих методов через instanceof, чтобы избежать ошибок сравнения.

    habr.com/ru/articles/992904/

    #java #java_spring #spring #spring_boot #spring_framework #backend

  25. [Перевод] Почему ваш Docker-контейнер взломают завтра (и как этого избежать)

    «Контейнер скомпрометирован». С этих слов начался трёхчасовой ночной кошмар с утечкой данных и полным отчётом об инциденте. Всё из-за банального запуска контейнера от root с лишними правами. Тут не нужно быть хакером или гуру DevSecOps. Проблема в том, что безопасность попросту игнорируют. В новом переводе от команды Spring АйО — 11 конкретных шагов, которые помогут вам избежать катастрофы: от запуска от непривилегированного пользователя до минимальных образов, сканирования уязвимостей, изоляции сетей и настройки профилей безопасности. Если вы разворачиваете контейнеры в продакшене — это руководство должно стать вашей чеклист-основой. Ошибка может стоить очень дорого.

    habr.com/ru/companies/spring_a

    #java #kotlin #docker #devops #spring #spring_boot #spring_framework

  26. Разработка приложения на Spring Boot, Java, База данных, профиль пользователя. Часть 1

    Всем привет! Когда речь заходит о разработке высоконагруженных систем, многие предлагают: «python, сделать проще и быстрее». Но есть проблема: Скорость разработки != скорость и качество работы сервиса. Когда мы делаем любой продукт, важны: Масштабируемость, стабильность работы под большой нагрузкой, предсказуемость поведения системы — особенно когда речь идет о тысячах одновременных пользователей, лентах новостей в реальном времени, уведомлениях и сложных связях между разными сущностями. Именно поэтому и выбрана Java и Spring Boot как основа. Банки, сервисы видео, они работают именно на Java и Spring. Одна из особенностей: строгая типизация, качественные инструменты для многопоточности, мощная экосистема и предсказуемое потребление памяти делают Java идеальным выбором для систем, где падение = полная потеря пользователей. Попробую сделать цикл статей по разработке соцсети, которая будет объединять в себе ВК, пикабу, и иже с ними. Не ради «создания продукта который затмит всех и вся», а ради самого программирования. Итак, начну, среда разработки Intellij Idea. О, точно, весь проект будет доступен из gitLab. Нам необходимо создать файлы с конфигурацией. можно сказать что их обычно 3. Да, я про application.yml. один из них общий, который так и называется: application.yml, и еще два: application-dev.yml и application-prod.yml

    habr.com/ru/articles/991974/

    #java #spring #spring_boot #spring_framework #backend

  27. Три модели многопоточности: Event Loop, Platform Threads и Virtual Threads

    Разные языки пришли к разным моделям многопоточности и каждая решает проблему по-своему. Разбираем специфику каждой модели.

    habr.com/ru/articles/991162/

    #java #spring #spring_boot #spring_framework #springboot #многопоточность #multithreading

  28. [Перевод] Redis — это больше, чем просто кэш

    Пора перестать воспринимать Redis как временное хранилище key-value. Сегодня это многофункциональный движок, объединяющий в себе брокер сообщений с поддержкой Pub/Sub, гео-БД с Spatial-индексами, и надежный инструмент синхронизации через распределенные блокировки (Redlock). Современный Redis, потенциально, может заменить стек из 3–4 узкоспециализированных сервисов. В новом переводе от команды Spring АйО рассмотрим, как использовать Redis на полную катушку и превратить его в фундамент вашей архитектуры.

    habr.com/ru/companies/spring_a

    #redis #java #kotlin #database #базы_данных #db #spring #spring_boot #spring_framework

  29. [Перевод] Мы сломали Nginx одним limit_req

    Что делать, когда инфраструктура, сдерживавшая злоумышленников, внезапно начинает мешать легитимным клиентам? В Dodo Payments такой момент наступил в 23:00 в четверг — и стал точкой невозврата. В новом переводе от команды Spring АйО подробно разберем переход с классического ingress-контроллера на полноценный service mesh. Миграция заняла 11 недель и навсегда изменила подход к платформенной инженерии.

    habr.com/ru/companies/spring_a

    #java #kotlin #ci #deployment #nginx #spring #spring_boot #spring_framework

  30. [Перевод] Паттерны проектирования в Data Engineering, которые необходимо освоить в 2026 году

    Настоящая устойчивость систем — в архитектуре. В новом переводе от команды Spring АйО — 8 фундаментальных паттернов проектирования, на которых держатся все современные data engineering-стеки. Освоив их, вы перестанете тушить пожары и начнёте проектировать платформы, которые выдерживают продакшен.

    habr.com/ru/companies/spring_a

    #java #kotlin #system_design #patterns #spring #spring_boot #spring_framework #springboot #spring_data