Когда InputStream становится архитектурной проблемой
Если открыть код большого Java-проекта, особенно связанного с интеграцией или обработкой файлов, рано или поздно можно встретить примерно такой класс: class Image { private final InputStream ...
Если открыть код большого Java-проекта, особенно связанного с интеграцией или обработкой файлов, рано или поздно можно встретить примерно такой класс: class Image { private final InputStream ...
Для логирования в Java обычно достаточно создать Logger, вызвать log.info() и получить сообщение в консоли или файле. Из-за этого может сложиться впечатление, что логирование представляет собой дов...
В реальных проектах работа обычно строится не вокруг отдельных команд, а вокруг workflow — набора правил, которые позволяют нескольким разработчикам одновременно работать над одним репозиторием, пр...
stack trace выглядит как обычный текст ошибки, однако за ним стоит довольно сложная модель обработки. Во время создания исключения, JVM проходит по фреймам стека, формирует его снимок, создает Stac...
При первом знакомстве с Gradle файл build.gradle часто выглядит непривычно. Он содержит Groovy- или Kotlin-инструкции вида plugins {}, dependencies {}, repositories {}, tasks.named(...), которые не...
При тестировании сервиса, который выполняет HTTP-запросы во внешние системы, возникает базовая проблема: как проверить поведение без зависимости от реального внешнего API. Прямое обращение к внешн...
Реализация equals() и hashCode() для JPA-сущностей отличается от обычных объектов: для сущностей равенство, как правило, определяется по одному полю — идентификатору (id). На первый взгляд это выг...
Использование JSONB в реляционной базе выглядит спорно, если рассматривать его как замену нормализованной модели (как то: хранение связанных сущностей внутри одного JSON вместо отдельных таблиц и с...
Статический анализ кода является стандартной практикой в крупных Java-проектах. Однако интеграция таких инструментов в существующие enterprise-системы часто оказывается сложнее, чем показано в доку...
Задача идемпотентного создания индексов остается актуальной и сегодня. Миграции регулярно выполняются повторно — при rollback, re‑deploy, blue‑green‑развертываниях и аварийных перезапусках. Окруже...