Spring-boot-starter для паттерна Transaction outbox Kafka
В микросервисной архитектуре мы постоянно сталкиваемся с задачей: сохранить изменения в базе и гарантированно отправить событие в Kafka. На первый взгляд звучит просто — сделал транзакцию, отправил сообщение, закоммитил. Но в реальности между базой данных и брокером сообщений никакой общей транзакции нет.
В этой статье я покажу, как я вынес всю логику Transaction Outbox в отдельный Spring Boot Starter, который можно подключить одной зависимостью. Он создаёт таблицу Outbox, конфигурирует шедулер, отвечает за отправку в Kafka и очистку, позволяя микросервисам сосредоточиться только на бизнес-логике.
Читать: https://habr.com/ru/articles/966802/?utm_campaign=966802
@a_cup_of_java | Другие наши каналы
В микросервисной архитектуре мы постоянно сталкиваемся с задачей: сохранить изменения в базе и гарантированно отправить событие в Kafka. На первый взгляд звучит просто — сделал транзакцию, отправил сообщение, закоммитил. Но в реальности между базой данных и брокером сообщений никакой общей транзакции нет.
В этой статье я покажу, как я вынес всю логику Transaction Outbox в отдельный Spring Boot Starter, который можно подключить одной зависимостью. Он создаёт таблицу Outbox, конфигурирует шедулер, отвечает за отправку в Kafka и очистку, позволяя микросервисам сосредоточиться только на бизнес-логике.
Читать: https://habr.com/ru/articles/966802/?utm_campaign=966802
@a_cup_of_java | Другие наши каналы
✍1
Графический редактор PaintCAD Mobile — переделка под большие экраны телефонов
Жил-был в 2000-2005(-2010) годах такой пет-проект - графический пиксель-арт редактор для J2ME мобильных телефонов - PaintCAD (смесь паинта и системы, управляемой с телефонной клавиатуры, ползающей курсором по рисунку, рисующей и применяющей эффекты, обрабатывающей изображения, создающей GIF-анимации, растровые PCF-шрифты и т.д.).
И что было дальше?
Читать: https://habr.com/ru/articles/966836/?utm_campaign=966836
@a_cup_of_java | Другие наши каналы
Жил-был в 2000-2005(-2010) годах такой пет-проект - графический пиксель-арт редактор для J2ME мобильных телефонов - PaintCAD (смесь паинта и системы, управляемой с телефонной клавиатуры, ползающей курсором по рисунку, рисующей и применяющей эффекты, обрабатывающей изображения, создающей GIF-анимации, растровые PCF-шрифты и т.д.).
И что было дальше?
Читать: https://habr.com/ru/articles/966836/?utm_campaign=966836
@a_cup_of_java | Другие наши каналы
👍1
Скважины, потоки и GC: как Java помогает качать нефть и сохранять ИТ-ресурсы и кадры
Многие промышленные системы ТЭК десятилетиями держались на Java. И это помогло им избежать полного ребилда. Если коротко: нефтегазовые компании в России не стали переписывать свои системы с нуля — они просто остались на Java. Только теперь — на отечественной.
Читать: https://habr.com/ru/companies/axiomjdk/articles/966704/?utm_campaign=966704
@a_cup_of_java | Другие наши каналы
Многие промышленные системы ТЭК десятилетиями держались на Java. И это помогло им избежать полного ребилда. Если коротко: нефтегазовые компании в России не стали переписывать свои системы с нуля — они просто остались на Java. Только теперь — на отечественной.
Читать: https://habr.com/ru/companies/axiomjdk/articles/966704/?utm_campaign=966704
@a_cup_of_java | Другие наши каналы
👎2
Почему каждой команде нужен AI-рецензент в 2025
В статье Java67 рассказывается о CodeRabbit — AI-рецензенте, который автоматически находит баги, уязвимости и крайние случаи, экономит время на ревью и предотвращает инциденты. AI дополнит людей, а не заменит их. Обзор: Темы блога JavaRevisited
В статье собраны теги и архивы блога JavaRevisited — Java, Spring, алгоритмы, DevOps, ML, базы данных, интервью-вопросы и онлайн-курсы. Полезная навигация для подготовки к собеседованиям и самообучения. Навигация блога: архив и подписка
На странице перечислены архив по годам и месяцам, ссылки Privacy Policy и Terms & Conditions, блок "Popular Posts" и форма подписки по e-mail. Указан копирайт Soma Sharma 2021–2025. Полезно для поиска прошлых записей.
Подробности: http://www.java67.com/2025/11/stop-shipping-bugs-why-every-team-needs.html
#en
@a_cup_of_java | Другие наши каналы
В статье Java67 рассказывается о CodeRabbit — AI-рецензенте, который автоматически находит баги, уязвимости и крайние случаи, экономит время на ревью и предотвращает инциденты. AI дополнит людей, а не заменит их. Обзор: Темы блога JavaRevisited
В статье собраны теги и архивы блога JavaRevisited — Java, Spring, алгоритмы, DevOps, ML, базы данных, интервью-вопросы и онлайн-курсы. Полезная навигация для подготовки к собеседованиям и самообучения. Навигация блога: архив и подписка
На странице перечислены архив по годам и месяцам, ссылки Privacy Policy и Terms & Conditions, блок "Popular Posts" и форма подписки по e-mail. Указан копирайт Soma Sharma 2021–2025. Полезно для поиска прошлых записей.
Подробности: http://www.java67.com/2025/11/stop-shipping-bugs-why-every-team-needs.html
#en
@a_cup_of_java | Другие наши каналы
❤1
Forwarded from Типичный программист
С кем знакомятся типичные программисты: 2D-тян или живая девушка?
Согласно недавним исследованиям Vantage Point Counseling Services, треть американцев хотя бы раз состояла в романтических отношениях с ИИ. Появилось даже приложение Loverse для виртуальных знакомств, где вместо реальных людей роль партнёров выполняют чат-боты с искусственным интеллектом.
Мы решили провести своё исследование и выяснить где и с кем сегодня знакомятся пользователи стран СНГ. Пожалуйста, пройдите наш небольшой опрос. Это поможет нашему исследованию.
Пройти опрос.
Согласно недавним исследованиям Vantage Point Counseling Services, треть американцев хотя бы раз состояла в романтических отношениях с ИИ. Появилось даже приложение Loverse для виртуальных знакомств, где вместо реальных людей роль партнёров выполняют чат-боты с искусственным интеллектом.
Мы решили провести своё исследование и выяснить где и с кем сегодня знакомятся пользователи стран СНГ. Пожалуйста, пройдите наш небольшой опрос. Это поможет нашему исследованию.
Пройти опрос.
😍1
Как не сойти с ума с Grafana Unified Alerting: настраиваем алерт и разбираем все грабли
В какой-то момент простого дашборда уже не хватает. Хочется, чтобы метрики не просто “где-то красиво лежали”, а сами приходили и били в лицо, когда что-то пошло не так.
Разберёмся с Grafana Unified Alerting, expressions, темплейтами уведомлений и типичными ошибками, которые легко словить, если вы впервые лезете в алерты.
Читать: https://habr.com/ru/articles/966902/?utm_campaign=966902
@a_cup_of_java | Другие наши каналы
В какой-то момент простого дашборда уже не хватает. Хочется, чтобы метрики не просто “где-то красиво лежали”, а сами приходили и били в лицо, когда что-то пошло не так.
Разберёмся с Grafana Unified Alerting, expressions, темплейтами уведомлений и типичными ошибками, которые легко словить, если вы впервые лезете в алерты.
Читать: https://habr.com/ru/articles/966902/?utm_campaign=966902
@a_cup_of_java | Другие наши каналы
Многопоточность без боли: моя шпаргалка для собесов в Java
Всем привет!)
Я работаю Senior Java Developer в одном из банков, и за последние годы мне пришлось пройти не одно собеседование, услышать десятки каверзных вопросов и потратить уйму времени на подготовку. И вот что я понял: многопоточность — это одна из самых сложных и любимых тем на Java-собеседованиях, независимо от уровня кандидата.
Поэтому в этой статье я хочу помочь вам уверенно подготовиться к секции по concurrency: разберём ключевые термины, посмотрим, как это работает на практике, и дам несколько советов, которые реально помогают на собесах. Поехали!
Читать: https://habr.com/ru/articles/966892/?utm_campaign=966892
@a_cup_of_java | Другие наши каналы
Всем привет!)
Я работаю Senior Java Developer в одном из банков, и за последние годы мне пришлось пройти не одно собеседование, услышать десятки каверзных вопросов и потратить уйму времени на подготовку. И вот что я понял: многопоточность — это одна из самых сложных и любимых тем на Java-собеседованиях, независимо от уровня кандидата.
Поэтому в этой статье я хочу помочь вам уверенно подготовиться к секции по concurrency: разберём ключевые термины, посмотрим, как это работает на практике, и дам несколько советов, которые реально помогают на собесах. Поехали!
Читать: https://habr.com/ru/articles/966892/?utm_campaign=966892
@a_cup_of_java | Другие наши каналы
Реактивное программирование в Java: от теории к практике
"Когда пару лет назад я впервые столкнулась с реактивным программированием, - рассказывает моя коллега Екатерина, - казалось, что это что-то слишком сложное и академическое. Но чем больше работаешь с современными высоконагруженными системами, тем яснее становится, что без реактивного подхода сложно обеспечить высокую отзывчивость и масштабируемость".
Читать: https://habr.com/ru/articles/966502/?utm_campaign=966502
@a_cup_of_java | Другие наши каналы
"Когда пару лет назад я впервые столкнулась с реактивным программированием, - рассказывает моя коллега Екатерина, - казалось, что это что-то слишком сложное и академическое. Но чем больше работаешь с современными высоконагруженными системами, тем яснее становится, что без реактивного подхода сложно обеспечить высокую отзывчивость и масштабируемость".
Читать: https://habr.com/ru/articles/966502/?utm_campaign=966502
@a_cup_of_java | Другие наши каналы
Выпущена версия Jmix 2.7
Мы рады сообщить о выпуске Jmix 2.7! Эта версия представляет обновленный дизайнер ролей в Jmix Studio, новые UI-компоненты и включает ряд других улучшений фреймворка. Полный список изменений вы можете посмотреть в разделе "Что нового" документации Jmix.
Ниже приведен краткий обзор основных новых функций Jmix 2.7.
Читать: https://habr.com/ru/companies/haulmont/articles/966526/?utm_campaign=966526
@a_cup_of_java | Другие наши каналы
Мы рады сообщить о выпуске Jmix 2.7! Эта версия представляет обновленный дизайнер ролей в Jmix Studio, новые UI-компоненты и включает ряд других улучшений фреймворка. Полный список изменений вы можете посмотреть в разделе "Что нового" документации Jmix.
Ниже приведен краткий обзор основных новых функций Jmix 2.7.
Читать: https://habr.com/ru/companies/haulmont/articles/966526/?utm_campaign=966526
@a_cup_of_java | Другие наши каналы
Добавляем MapReduce в этот наш SQL: генераторы на основе курсоров
Вот уже который год я потихоньку разрабатываю SQL-ный движок на основе Apache Spark, специализированный под задачи ETL. И хотя диалект языка изначально называется «Transform Definition Language», писать трансформации данных непосредственно на нём самом было до сих пор невозможно. Вместо этого на фазе Transform предполагалось использовать подключаемые модули, которые рантайм интерпретатора предоставляет из Java classpath.
Это очень эффективный с точки зрения производительности, но довольно долгий с точки зрения внедрения, и дорогой в разработке способ. Сначала трансформацию надо описать формально в виде статьи-whitepaper'а (это делает data scientist), потом написать прототип на Python (ответственность data analyst), отладиться на сэмпле реальных данных (тоже аналитик), и тогда уже делать и оптимизировать финальную имплементацию на Java с использованием низкоуровневого API Spark (собственно, задача разработчика). Неудобно.
Нельзя ли его как-нибудь сократить? Например, дать аналитикам инструмент для написания трансформаций непосредственно в самом SQL, вынеся некоторую часть функциональности MapReduce как разновидность итерирующих функций? Можно, конечно!
Давайте узнаем, как именно
Читать: https://habr.com/ru/articles/958362/?utm_campaign=958362
@a_cup_of_java | Другие наши каналы
Вот уже который год я потихоньку разрабатываю SQL-ный движок на основе Apache Spark, специализированный под задачи ETL. И хотя диалект языка изначально называется «Transform Definition Language», писать трансформации данных непосредственно на нём самом было до сих пор невозможно. Вместо этого на фазе Transform предполагалось использовать подключаемые модули, которые рантайм интерпретатора предоставляет из Java classpath.
Это очень эффективный с точки зрения производительности, но довольно долгий с точки зрения внедрения, и дорогой в разработке способ. Сначала трансформацию надо описать формально в виде статьи-whitepaper'а (это делает data scientist), потом написать прототип на Python (ответственность data analyst), отладиться на сэмпле реальных данных (тоже аналитик), и тогда уже делать и оптимизировать финальную имплементацию на Java с использованием низкоуровневого API Spark (собственно, задача разработчика). Неудобно.
Нельзя ли его как-нибудь сократить? Например, дать аналитикам инструмент для написания трансформаций непосредственно в самом SQL, вынеся некоторую часть функциональности MapReduce как разновидность итерирующих функций? Можно, конечно!
Давайте узнаем, как именно
Читать: https://habr.com/ru/articles/958362/?utm_campaign=958362
@a_cup_of_java | Другие наши каналы
Java-дайджест: Spring 7.0, JDK 26 и важные релизы
В обзоре InfoQ: GA Spring Framework 7.0, Spring Data и Spring AI; JEP‑предпросмотры для JDK 26; релизы Payara, Maven RC5, JobRunr и Micronaut — что важно знать.
Подробности: https://www.infoq.com/news/2025/11/java-news-roundup-nov10-2025/
#en
@a_cup_of_java | Другие наши каналы
В обзоре InfoQ: GA Spring Framework 7.0, Spring Data и Spring AI; JEP‑предпросмотры для JDK 26; релизы Payara, Maven RC5, JobRunr и Micronaut — что важно знать.
Подробности: https://www.infoq.com/news/2025/11/java-news-roundup-nov10-2025/
#en
@a_cup_of_java | Другие наши каналы
Как скопировать дерево, но не точь-в-точь
На собеседованиях и литкоде любят вращать бинарные деревья. Но что насчёт трансформации обычного дерева в другое? Как решить эту задачу, и какие могут быть подходы? Рассмотрим на опыте трансляции одного синтаксического в другое, чтобы разобраться.
Читать: https://habr.com/ru/companies/pvs-studio/articles/967530/?utm_campaign=967530
@a_cup_of_java | Другие наши каналы
На собеседованиях и литкоде любят вращать бинарные деревья. Но что насчёт трансформации обычного дерева в другое? Как решить эту задачу, и какие могут быть подходы? Рассмотрим на опыте трансляции одного синтаксического в другое, чтобы разобраться.
Читать: https://habr.com/ru/companies/pvs-studio/articles/967530/?utm_campaign=967530
@a_cup_of_java | Другие наши каналы
Spring без боли: моя шпаргалка для собесов в Java. Часть 3
Всем привет!
Сейчас я работаю Senior Java Developer в одном из банков, и за последние годы мне довелось пройти множество собеседований, столкнуться с десятками непростых вопросов и вложить кучу времени в подготовку. И со временем я заметил одну закономерность: Spring — одна из самых объёмных и любимых тем на Java‑собеседованиях, причём спрашивают её у кандидатов любого уровня.
Поэтому в этой статье я хочу помочь вам уверенно подготовиться к вопросам по Spring, также покажу примеры задач, которые дают на собеседованиях. Поехали!
Читать: https://habr.com/ru/articles/967632/?utm_campaign=967632
@a_cup_of_java | Другие наши каналы
Всем привет!
Сейчас я работаю Senior Java Developer в одном из банков, и за последние годы мне довелось пройти множество собеседований, столкнуться с десятками непростых вопросов и вложить кучу времени в подготовку. И со временем я заметил одну закономерность: Spring — одна из самых объёмных и любимых тем на Java‑собеседованиях, причём спрашивают её у кандидатов любого уровня.
Поэтому в этой статье я хочу помочь вам уверенно подготовиться к вопросам по Spring, также покажу примеры задач, которые дают на собеседованиях. Поехали!
Читать: https://habr.com/ru/articles/967632/?utm_campaign=967632
@a_cup_of_java | Другие наши каналы
✍2❤1
Числовой тип данных с плавающей точкой double IEEE 754
Данный пост является продолжением предыдущего поста, оно посвящено детальному разбору вещественного типа данных с плавающей точкой удвоенной точности double
Читать: https://habr.com/ru/articles/967750/?utm_campaign=967750
@a_cup_of_java | Другие наши каналы
Данный пост является продолжением предыдущего поста, оно посвящено детальному разбору вещественного типа данных с плавающей точкой удвоенной точности double
Читать: https://habr.com/ru/articles/967750/?utm_campaign=967750
@a_cup_of_java | Другие наши каналы
❤1
Нативный API Versioning в Spring 7: долгожданная официальная поддержка
Команда Spring АйО подготовила перевод статьи о том, как Spring Framework 7 приносит нативную поддержку API-версионирования — темы, которая годами оставалась на разработчиках и собирала тонны костылей. Теперь Spring Framework предлагает единый, продуманный механизм как для серверной, так и для клиентской стороны. Что это меняет для архитектуры и разработки на Spring — разберёмся в статье.
Читать: https://habr.com/ru/companies/spring_aio/articles/967454/?utm_campaign=967454
@a_cup_of_java | Другие наши каналы
Команда Spring АйО подготовила перевод статьи о том, как Spring Framework 7 приносит нативную поддержку API-версионирования — темы, которая годами оставалась на разработчиках и собирала тонны костылей. Теперь Spring Framework предлагает единый, продуманный механизм как для серверной, так и для клиентской стороны. Что это меняет для архитектуры и разработки на Spring — разберёмся в статье.
Читать: https://habr.com/ru/companies/spring_aio/articles/967454/?utm_campaign=967454
@a_cup_of_java | Другие наши каналы
Как IN (:ids) раздувал Hibernate Query Plan Cache до 100+ МБ и почему ANY(:ids) спас прод
При разборе продакшн heap dump я обнаружил странность: Hibernate Query Plan Cache занимал почти треть памяти. Обычный
Почему так происходит и как полностью решить проблему с помощью
Читать: https://habr.com/ru/articles/968058/?utm_campaign=968058
@a_cup_of_java | Другие наши каналы
При разборе продакшн heap dump я обнаружил странность: Hibernate Query Plan Cache занимал почти треть памяти. Обычный
IN (:ids) внезапно генерировал тысячи SQL-планов и раздувал heap. Почему так происходит и как полностью решить проблему с помощью
ANY(:ids) — разбираю пошагово на реальном примереЧитать: https://habr.com/ru/articles/968058/?utm_campaign=968058
@a_cup_of_java | Другие наши каналы
😁5
Мечтают ли ИИ-агенты об удобных IDE?
О программировании с помощью AI-агентов трубят из-за каждого угла. Последнее время появилось достаточно много инструментов, которые буквально пишут код за разработчика. Наша команда следит за индустрией ИИ в разработке достаточно давно. Помимо внедрения ИИ в сам процесс разработки наших продуктов, мы активно занимаемся интеграцией Amplicode с современными AI-агентами и не только. И у нас есть свои мысли на этот счет)
Читать: https://habr.com/ru/companies/haulmont/articles/925088/?utm_campaign=925088
@a_cup_of_java | Другие наши каналы
О программировании с помощью AI-агентов трубят из-за каждого угла. Последнее время появилось достаточно много инструментов, которые буквально пишут код за разработчика. Наша команда следит за индустрией ИИ в разработке достаточно давно. Помимо внедрения ИИ в сам процесс разработки наших продуктов, мы активно занимаемся интеграцией Amplicode с современными AI-агентами и не только. И у нас есть свои мысли на этот счет)
Читать: https://habr.com/ru/companies/haulmont/articles/925088/?utm_campaign=925088
@a_cup_of_java | Другие наши каналы
❤1
Axiom JDK: криптография «из коробки» и подключение ГОСТ-провайдеров
Приглашаем на вебинар, на котором поговорим, как защитить сборки, избежать зависимостей от внешних репозиториев и повысить надёжность.
Вебинар бесплатный, нужно только зарегистрироваться.
Читать: https://habr.com/ru/companies/axiomjdk/articles/968332/?utm_campaign=968332
@a_cup_of_java | Другие наши каналы
Приглашаем на вебинар, на котором поговорим, как защитить сборки, избежать зависимостей от внешних репозиториев и повысить надёжность.
Вебинар бесплатный, нужно только зарегистрироваться.
Читать: https://habr.com/ru/companies/axiomjdk/articles/968332/?utm_campaign=968332
@a_cup_of_java | Другие наши каналы
CookBook maven plugin. CDI, отладка и тестирование
CookBook maven plugin. CDI, отладка и тестирование. Цель статьи - рассказать об опыте разработки плагина.
Читать: https://habr.com/ru/articles/968502/?utm_campaign=968502
@a_cup_of_java | Другие наши каналы
CookBook maven plugin. CDI, отладка и тестирование. Цель статьи - рассказать об опыте разработки плагина.
Читать: https://habr.com/ru/articles/968502/?utm_campaign=968502
@a_cup_of_java | Другие наши каналы
БД без боли: моя шпаргалка для собесов в Java. Часть 3
Всем привет!
Я Senior Java Developer в банке, и за эти годы мне довелось пройти немало собеседований. Где-то было спокойно, где-то — как в допросной, с каверзными вопросами, странными задачами и вечным «а почему так, а не иначе?». В процессе я собрал целую коллекцию тем, которые всплывают снова и снова, особенно когда дело касается баз данных.
Сегодня хочу поделиться этим опытом и разобрать вопросы, которые чаще всего задают именно по SQL-базам.
Читать: https://habr.com/ru/articles/968532/?utm_campaign=968532
@a_cup_of_java | Другие наши каналы
Всем привет!
Я Senior Java Developer в банке, и за эти годы мне довелось пройти немало собеседований. Где-то было спокойно, где-то — как в допросной, с каверзными вопросами, странными задачами и вечным «а почему так, а не иначе?». В процессе я собрал целую коллекцию тем, которые всплывают снова и снова, особенно когда дело касается баз данных.
Сегодня хочу поделиться этим опытом и разобрать вопросы, которые чаще всего задают именно по SQL-базам.
Читать: https://habr.com/ru/articles/968532/?utm_campaign=968532
@a_cup_of_java | Другие наши каналы
Spring 7 и Spring Boot 4: API‑версионирование, JSpecify и резильенс
По данным InfoQ, релизы вводят встроенное REST API‑версионирование, JSpecify‑аннотации для null‑безопасности, механизмы устойчивости (retry, concurrency limit), миграцию на Jackson 3 и модульную автонастройку. Читайте статью.
Подробности: https://www.infoq.com/news/2025/11/spring-7-spring-boot-4/
#en
@a_cup_of_java | Другие наши каналы
По данным InfoQ, релизы вводят встроенное REST API‑версионирование, JSpecify‑аннотации для null‑безопасности, механизмы устойчивости (retry, concurrency limit), миграцию на Jackson 3 и модульную автонастройку. Читайте статью.
Подробности: https://www.infoq.com/news/2025/11/spring-7-spring-boot-4/
#en
@a_cup_of_java | Другие наши каналы
❤3👍1