RU

Платёж списывается дважды. Найдите причину в коде, который прошёл ревью

Платёжный сервис прошёл ревью, тесты зелёные, в базе один успешный платёж — а с карты списали деньги дважды. Причём в двух…

идемпотентностьдвойное списаниеплатёжный сервисраспределённые системыSpring BootJavaPostgreSQLретраиконкурентные запросымикросервисная архитектура
Habr
RU

HikariCP в проде: три раза, когда пул соединений уронил сервис, и почему maximumPoolSize тут был ни при чём

В прошлой статье про PostgreSQL я разбирал три инцидента на стороне базы — блокировки, bloat и ночные пересчёты. В комментариях несколько человек на…

hikaricpпул соединенийSpring BootPostgreSQLconnection poolJDBCтранзакциипроизводительностьconnection leakвысоконагруженные системы
Habr
RU

Авторизация как код, но не в коде: ABAC для Spring Boot на Open Policy Agent

Авторизация в Spring обычно живёт в аннотациях и SpEL — и ломается на иерархии ресурсов и фильтрации списков. Как вынести правила доступа в OPA, не…

Open Policy AgentOPAABACRegoавторизацияSpring BootSpring Securitypolicy as codepartial evaluationконтроль доступа
Habr
RU

Как я случайно напечатал инфляцию в Discord‑боте и переделал ставки в тотализатор

Всё, что ниже — из живого пет-проекта: бот начисляет участникам голосовых каналов баллы лояльности (LP), а на эти баллы люди устраивают пари в стиле…

JavaSpring BootJDADiscord-ботPostgreSQLконкурентностьидемпотентностьтотализаторигровая экономикатранзакции
Habr
RU

Как мы заменили 30-минутный polling на IMAP IDLE и построили маленькую распределённую систему

Когда-то наш почтовый загрузчик был обычным методом с @Scheduled . Раз в 30 минут он подключался к ящикам, искал новые вложения и запускал их обрабо…

JavaSpring BootIMAP IDLEdistributed systemsPostgreSQL leasesidempotencybackpressurevirtual threadsconcurrencyat-least-once delivery
Habr
RU

Вам не нужны микросервисы

Какое‑то время назад, проработав 3 года на позиции Java Middle+‑ разработчика на крупном монолитном легаси‑проекте (естественно, моду…

Spring Modulithмодульный монолитмикросервисыархитектура приложенийJavaSpring Bootгексагональная архитектураперевод PDF
Habr
RU

Уязвимость пришла из зависимости, которую вы не добавляли: ловим дыры в Spring до прода в GitLab

В статье разбираем на боевом примере (Spring Boot 4.1, Java 21, GitLab 19.1), как поймать уязвимую зависимость в merge request&n…

безопасность зависимостейтранзитивные зависимостиGitLab CIDependency ScanningSpring BootMavenSBOMуязвимости CVEsupply chain security
Habr
RU

Как сделать MCP-сервер из Spring-сервиса за один вечер. И что потом не даст спать спокойно

AI‑агенту не нужен прямой доступ к базе, чтобы отвечать на вопросы оператора или вызывать действия в системе. Достаточно да…

MCPSpring AIJavaSpring BootAI-агентыLLM-интеграциимикросервисыбезопасность LLMprompt injectionархитектура ИИ-приложений
Habr
RU

Black-box тесты на Java: функциональные тесты за секунды и в параллель и почему я остался на своих

Я наткнулся на подход к функциональным тестам, который меня по-настоящему удивил. Тесты в нём вообще не знают, что внутри Spring: стучатся в реально…

функциональные тестыинтеграционные тестыblack-box тестыSpring BootTestcontainersJaCoCoflaky-тестыпокрытие кодаJavaтестирование
Habr
RU

C# мне нравится больше Java. Но в банковском enterprise мне всё равно понадобилась Java

C# я до сих пор считаю одним из самых удобных языков для backend разработки. В нём много вещей к которым быстро привыкаешь: свойства, LINQ, async/aw…

C#JavabackendenterpriseбанкиSpring Boot.NETмикросервисыимпортозамещениекарьера
Habr
RU

Сможете ли вы спроектировать Maven‑монорепозиторий для 5 микросервисов?

В этой статье мы разберём реальную задачу на проектирование Maven Multi‑Module: от циклических зависимостей и неправильного использов…

MavenмонорепозиториймикросервисыSpring Bootmulti-moduledependencyManagementMaven Wrapperархитектура сборкиJava
Habr
RU

Как мы перестали размножать BIRT‑шаблоны и собрали блочную платформу self‑service генерации страховых полисов в PDF

Когда документов и партнёров стало много, модель «один кейс — один шаблон» начала мешать даже простым правкам. Рассказываю, как мы вынесли композици…

BIRTPDFгенерация документовшаблоныJavaSpring Bootверсионированиеконфигурированиеself-serviceстрахование
Habr
RU

Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения

Привет, Хабр. Я Java-разработчик и в основном работаю с backend: Spring Boot, базы данных, интеграции, авторизация, WebSocket — всё то, что обычно н…

E2EEмессенджерSpring BootX3DHкриптографияWebSocketJavaшифрованиеSignal ProtocolWebCrypto