home.social

#spring_data — Public Fediverse posts

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

fetched live
  1. Один ко многим в Java: когда коллекция в родителе оправдана, а когда — нет

    Реляционная модель хранит FK на стороне дочерней таблицы. В Java у нас два способа отразить эту связь: коллекция в родительской сущности ( @OneToMany / List) или ссылка в дочерней ( @ManyToOne / long parentId). Выбор между ними влияет на поведение при записи — и именно здесь большинство решений принимаются без достаточного обоснования. Тест, который даёт однозначный ответ Влад Михалча формулирует так: ассоциация @ManyToOne является наиболее естественным способом отображения связи «один ко многим» в базе данных и, как правило, наиболее эффективной альтернативой. Практический критерий: если убрать коллекцию и заменить её отдельным запросом, какое бизнес-правило перестанет работать? Если ответ — «никакое, просто список будет получаться отдельным запросом» — коллекция не нужна как часть модели. Если ответ — «нарушится инвариант» — коллекция оправдана. Типичные случаи:

    habr.com/ru/articles/1050776/

    #java #jpa #hibernate #spring #spring_data #jdbc #onetomany #manytoone #ddd #aggregate

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

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

    habr.com/ru/companies/spring_a

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

  3. [Перевод] Команда 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

  4. Оптимизация запросов в Spring Data JDBC

    Я думаю многие согласятся, что Spring Data JDBC — это ORM, который занимает конкретную нишу: он предоставляет более легковесный репозиторный слой доступа к данным поверх реляционной БД без persistence context, без lazy loading, без dirty checking и т.д. Иными словами, Spring Data JDBC реализует принцип "what you see is what you get" — каждое обращение к репозиторию означает конкретный SQL-запрос в БД, который просто достаёт дерево Aggregate. Это и преимущество, и, тем не менее, иногда это источник потенциальных проблем с производительностью. В этой статье я разберу ключевые подходы к оптимизации запросов в Spring Data JDBC: от дизайна агрегатов и Single Query Loading, до Stream в качестве возвращаемого значения и @Modifying запросов. Разберём всё с кодом и на примерах. Только один момент - в этой статье я не затрагиваю Spring Data открытые/закрытые Projection-ы и т.п, так как я предполагаю, что пользователи Spring Data знают, что это и в каких ситуациях их стоит использовать. Эти вещи не специфичны для Spring Data JDBC, я же буду говорить про вещи более специфичные для Spring Data JDBC .

    habr.com/ru/companies/spring_a

    #java #spring #spring_data #spring_data_jdbc #orm #sql #performance

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

  6. [Перевод] Паттерны проектирования в 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

  7. [Перевод] Hidden классы в Java. Что скрывают Lambda выражения

    С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего Unsafe::defineAnonymousClass . Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность Unsafe , они лежат в основе ряда важных механизмов, такие как, например, реализация лямбд в JDK. Подробнее - в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

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

  8. Новый open source Java коннектор для Tarantool: практика с примерами кода

    VK Tech открывает исходный код коннектора Tarantool Java EE и переименовывает его в Tarantool Java SDK. Дистрибутив станет доступен в Maven Central, что упростит интеграцию с Java-приложениями в корпоративных средах. Меня зовут Артём Дубинин, я старший программист в VK Tech. Я разрабатываю коннекторы к Tarantool, а также участвую в разработке различных продуктов в VK Tech. Однажды я понял, что материала про совместную работу Java и Tarantool очень мало и из-за этого может казаться, что совмещать их сложно. Но на самом деле это не так — и иногда альтернативы Tarantool могут быть даже сложнее во взаимодействии. Поэтому я и решил написать эту статью. Цель статьи — показать через код, что Tarantool реально совместить с Java без больших полотен кода, а итеративно с небольшими сниппетами (не считая java импортов и xml 😄). Мы будем использовать такие, чтобы каждый мог попробовать провести у себя на компьютере эти эксперименты и понять, что Tarantool легок в использовании.

    habr.com/ru/companies/vktech/a

    #Tarantool #архитектура #Java #коннекторы #Redis #nosql #spring #spring_data #open_source #vk_tech

  9. [Перевод] Тред-дампы и Project Loom (виртуальные потоки)

    С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше. Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

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

  10. Путевые заметки о знакомстве со Spring Data R2DBC

    Привет, Хабр! Меня зовут Каненков Александр, я backend-разработчик в Домклик. Не так давно я резко и с головой погрузился в мир реактивного программирования и очень заинтересовался этой темой. Хочу поделиться кратким введением в Spring Data R2DBC, зачем это нужно, как начать использовать и какие преимущества даёт. Мы разработаем небольшое приложение, добавим flyway и напишем пару тестов.

    habr.com/ru/companies/domclick

    #java #kotlin #spring_data #r2dbc #testcontainers #flyway

  11. [Перевод] Spring Boot наконец получил нативную поддержку gRPC

    Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном. В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.

    habr.com/ru/companies/spring_a

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

  12. [Перевод] Обнаружение взаимоблокировок на JVM с помощью Fray

    Команда Spring АйО подготовила перевод про Fray — инструмент для обнаружения и воспроизведения ошибок многопоточности в Java-программах. Основанный на научных исследованиях и написанный на Kotlin, Fray использует технику теневой блокировки для выявления взаимоблокировок и других проблем синхронизации. Он уже доказал свою эффективность на таких проектах, как Kafka, Flink и Lucene.

    habr.com/ru/companies/spring_a

    #jvm #java #blocking #kotlin #jvm_hacks #spring #spring_boot #spring_framework #springboot #spring_data

  13. [Перевод] Как сократить расходы на токены и повысить точность LLM

    Когда количество доступных LLM инструментов (tool-ов) разрастается, традиционные подходы к tool calling становятся непрактичными — утилизация токенов улетает ещё до начала общения. К тому же, модели становится сложнее выбрать нужный набор tool-ов для решения проблемы. В новом переводе от команды Spring АйО читаем о паттерне Tool Search Tool, предложенном Anthropic и реализованном в Spring AI с помощью ToolSearchToolCallAdvisor. Он позволяет LLM динамически находить нужные инструменты по мере необходимости, экономя до 64% токенов и повышая точность.

    habr.com/ru/companies/spring_a

    #llm #tool #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_security #spring_data

  14. [Перевод] AOT в Spring Data: минус магия, плюс скорость

    Команда Spring АйО подготовила перевод статьи о том, как Spring Data тихо, но уверенно избавляется от «магии рантайма» и учит репозитории работать через AOT. Меньше скрытых прокси, больше прозрачного кода, быстрее старт сервисов. Кажется, это одно из самых крутых обновлений Spring за последние годы.

    habr.com/ru/companies/spring_a

    #spring #spring_aot #spring_data #spring_7 #spring_boot #spring_framework

  15. KRepo: Spring Data для Ktor — без Spring и без боли

    KRepo: Никаких имплементаций или инъекций. Под капотом — динамический прокси, кэширование метаданных и независимость от фреймворков: плагины под Exposed, JDBC или MongoDB реализуются отдельно.

    habr.com/ru/articles/969730/

    #kotlin #kotlin_coroutines #ktor #spring_data #jdbc

  16. Как дефолтная пагинация в Spring сломала проект и как это починить

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

    habr.com/ru/articles/965794/

    #java #kotlin #spring #springboot #spring_data_jpa #spring_data #pagination #keyset #optimization #db

  17. [Перевод] Встречаем Spring AI Agents и Spring AI Bench

    Java-разработчикам теперь доступен мощный инструментарий для работы с агентными ИИ-системами: Spring AI представила проекты Agents и Bench. В новом переводе от команды Spring АйО рассмотрим, как первый обеспечивает удобную абстракцию для работы с CLI ИИ-агентами, а второй — предлагает реалистичные бенчмарки для оценки их эффективности в задачах enterprise-разработки.

    habr.com/ru/companies/spring_a

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

  18. Проекции в Spring Data: производительность vs ограничения

    Всем привет! Я работаю разработчиком Java в компании bpm (ранее “ЛАНИТ - Би Пи Эм”). Приглашаю вас погрузиться в увлекательную тему оптимизации запросов в Spring Data — использование проекций. Если вы часто сталкиваетесь с необходимостью выборки лишь нескольких конкретных полей из большой сущности, понимая, насколько ресурсозатратно извлечение всей структуры целиком, этот материал специально для вас.

    habr.com/ru/companies/lanit/ar

    #java #spring_data #проекции

  19. [Перевод] Jackson 3 ворвался в Spring

    Команда Spring официально представила поддержку Jackson 3 — одного из крупнейших обновлений в экосистеме JSON для JVM. Уже начиная с Spring Boot 4 и Spring Framework 7, Jackson 3 становится версией по умолчанию, а Jackson 2 помечается как deprecated. В новом переводе от команды Spring АйО поговорим про нововведения — улучшенную безопасность, переход к JsonMapper , отказ от MappingJacksonValue , поддержку новых API и настройку через builder-интерфейсы.

    habr.com/ru/companies/spring_a

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

  20. [Перевод] LSP API теперь доступен всем пользователям IntelliJ IDEA и разработчикам плагинов

    Команда Spring АйО перевела статью от JetBrains, в которой рассказано про избавление одного из главных барьеров на пути к массовому внедрению Language Server Protocol (LSP) в своей экосистеме. С версии IntelliJ IDEA Ultimate 2025.2 пользователи смогут использовать LSP даже после окончания подписки, а с 2025.3 — LSP станет доступным во всех редакциях IDE благодаря переходу на единый дистрибутив.

    habr.com/ru/companies/spring_a

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

  21. [Перевод] Spring Boot 4 и Spring Framework 7: Ключевые фичи и изменения

    Уже в ноябре 2025 выходит Spring Boot 4 — масштабный релиз, построенный на фундаменте Spring Framework 7.0.0 и Jakarta EE 11. Это не просто очередное обновление, а важный этап в развитии всей Java-платформы: новые возможности для REST и безопасности, улучшенная работа с Kotlin и GraalVM, мощная поддержка облаков и нативных образов, а также инструменты для создания отказоустойчивых приложений. 🧠 Эта статья — больше, чем просто перевод: в ней собрано большое кол-во комментариев от экспертов Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #spring_data_jpa #spring_rest #spring_security

  22. Почти ультимативный гайд по Criteria API с продвинутыми возможностями Hibernate

    Вам нужно создать сложный запрос к реляционной БД с изменяющимися параметрами? В этой статье рассмотрим основные возможности Criteria API. Также рассмотрим более продвинутые вещи, например создание CTE и оконных функций, которые есть у Hibernate Criteria API. В статье много примеров, которые смогут помочь при написании запросов Criteria API на практике.

    habr.com/ru/articles/941130/

    #java #criteria #spring #hibernate #jpa #spring_data #postgres #sql #db #orm

  23. [Перевод] Конфигурация Spring Security на пальцах

    В новом переводе от команды Spring АйО мы рассмотрим решение для регистрации и аутентификации пользователя через клиентское JavaScript-приложение с использованием инфраструктуры Spring Security , а также access и refresh токенов. Существует множество базовых примеров работы со Spring Security, поэтому цель данной статьи — более подробно описать возможный процесс с помощью блок-схем.

    habr.com/ru/companies/spring_a

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

  24. [Перевод] Kafka умеет синхронно. В Spring Boot

    Apache Kafka — король асинхронного взаимодействия в микросервисных архитектурах. Но что если нужно получить ответ сразу? Перевод от команды Spring АйО шаг за шагом покажет, как превратить Kafka в инструмент синхронной коммуникации — с настройкой ReplyingKafkaTemplate , топиками для ответа и тайм-аутами.

    habr.com/ru/companies/spring_a

    #java #kotlin #kafka #kafka_consumer #spring #spring_boot #spring_framework #springboot #spring_data #spring_data_jpa

  25. JEP 511: Импорт модулей в Java 25 — как упростить работу с библиотеками

    Команда Spring АйО проанализировала JEP 511: импорт модулей. Теперь можно будет одним импортом подключать все пакеты, которые экспортирует модуль. Это сильно упростит работу с большими библиотеками, особенно в прототипах и обучении.

    habr.com/ru/companies/spring_a

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

  26. Аннотация Lazy как спасение от циклических зависимостей

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

    habr.com/ru/companies/spring_a

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

  27. JEP 520: Метод-трейсинг и тайминг в JFR — замер времени конкретных методов без кода и агентов

    Команда Spring АйО провела небольшое исследование JEP 520. В Java 25 JFR (Java Flight Recorder) позволит точно отслеживать выполнение конкретных методов — без изменения исходников, без логирования и без сторонних Java-агентов.

    habr.com/ru/companies/spring_a

    #java #kotlin #java_core #spring #spring_boot #spring_framework #springboot #spring_security #spring_data #spring_data_jpa

  28. Уже завтра! OpenIDE — профессиональные инструменты без ограничений

    Уже завтра, 31 июля состоится

    habr.com/ru/companies/spring_a

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

  29. [Перевод] Введение в Jimmer ORM

    Совсем недавно статью про ORM-фреймворк Jimmer Михаила Поливахи , эксперта сообщества Spring АйО , опубликовал Baeldung. Перед вами переработанная и дополненная версия, подготовленная специально для сообщества Spring АйО. В ней Михаил раскрывает ключевые особенности Jimmer: отсутствие JPA-наследия, декларативные DTO и гибкий DSL и потенциальную интеграцию со Spring.

    habr.com/ru/companies/spring_a

    #java #kotlin #jimmer #hibernate #spring #spring_boot #spring_framework #springboot #spring_security #spring_data

  30. Spring Tips: Аннотация @Lazy

    Хотите ускорить запуск приложения и сэкономить память? Аннотация @Lazy в Spring поможет инициализировать бины только тогда, когда они действительно понадобятся. Команда Spring АйО поможет разбобраться, как применять @Lazy точечно и глобально, в чём плюсы и подводные камни ленивой инициализации, и как избежать неожиданных ошибок на проде.

    habr.com/ru/companies/spring_a

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