Чашечка Java
الذهاب إلى القناة على Telegram
Лучшие материалы по Java на русском и английском Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels
إظهار المزيد8 314
المشتركون
-624 ساعات
-227 أيام
-6330 أيام
جارٍ تحميل البيانات
القنوات المماثلة
سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
أكتوبر '26أكتوبر '26
أكتوبر '26
+30
في 0 قنوات
سبتمبر '26
+26
في 0 قنوات
Get PRO
أغسطس '26
+13
في 0 قنوات
Get PRO
يوليو '26
+23
في 2 قنوات
Get PRO
يونيو '26
+50
في 1 قنوات
Get PRO
مايو '26
+58
في 0 قنوات
Get PRO
أبريل '26
+28
في 1 قنوات
Get PRO
مارس '26
+22
في 0 قنوات
Get PRO
فبراير '26
+16
في 2 قنوات
Get PRO
يناير '26
+38
في 1 قنوات
Get PRO
ديسمبر '25
+17
في 1 قنوات
Get PRO
نوفمبر '25
+30
في 1 قنوات
Get PRO
أكتوبر '25
+28
في 2 قنوات
Get PRO
سبتمبر '25
+47
في 1 قنوات
Get PRO
أغسطس '25
+52
في 1 قنوات
Get PRO
يوليو '25
+33
في 0 قنوات
Get PRO
يونيو '25
+34
في 0 قنوات
Get PRO
مايو '25
+36
في 0 قنوات
Get PRO
أبريل '25
+39
في 0 قنوات
Get PRO
مارس '25
+35
في 0 قنوات
Get PRO
فبراير '25
+38
في 0 قنوات
Get PRO
يناير '25
+50
في 0 قنوات
Get PRO
ديسمبر '24
+65
في 0 قنوات
Get PRO
نوفمبر '24
+49
في 0 قنوات
Get PRO
أكتوبر '24
+47
في 0 قنوات
Get PRO
سبتمبر '24
+43
في 0 قنوات
Get PRO
أغسطس '24
+67
في 0 قنوات
Get PRO
يوليو '24
+77
في 0 قنوات
Get PRO
يونيو '24
+64
في 0 قنوات
Get PRO
مايو '24
+69
في 0 قنوات
Get PRO
أبريل '24
+71
في 0 قنوات
Get PRO
مارس '24
+83
في 0 قنوات
Get PRO
فبراير '24
+72
في 0 قنوات
Get PRO
يناير '24
+58
في 0 قنوات
Get PRO
ديسمبر '23
+54
في 0 قنوات
Get PRO
نوفمبر '23
+34
في 0 قنوات
Get PRO
أكتوبر '23
+46
في 0 قنوات
Get PRO
سبتمبر '23
+36
في 0 قنوات
Get PRO
أغسطس '23
+81
في 0 قنوات
Get PRO
يوليو '23
+68
في 0 قنوات
Get PRO
يونيو '23
+79
في 0 قنوات
Get PRO
مايو '23
+72
في 0 قنوات
Get PRO
أبريل '23
+94
في 0 قنوات
Get PRO
مارس '23
+107
في 0 قنوات
Get PRO
فبراير '23
+198
في 0 قنوات
Get PRO
يناير '23
+160
في 0 قنوات
Get PRO
ديسمبر '22
+194
في 0 قنوات
Get PRO
نوفمبر '22
+215
في 0 قنوات
Get PRO
أكتوبر '22
+328
في 0 قنوات
Get PRO
سبتمبر '22
+198
في 0 قنوات
Get PRO
أغسطس '22
+435
في 0 قنوات
Get PRO
يوليو '22
+260
في 0 قنوات
Get PRO
يونيو '22
+546
في 0 قنوات
Get PRO
مايو '22
+567
في 0 قنوات
Get PRO
أبريل '22
+1 409
في 0 قنوات
Get PRO
مارس '22
+2 807
في 0 قنوات
Get PRO
فبراير '22
+716
في 0 قنوات
Get PRO
يناير '22
+1 112
في 0 قنوات
Get PRO
ديسمبر '21
+2 035
في 0 قنوات
Get PRO
نوفمبر '21
+2 682
في 0 قنوات
Get PRO
أكتوبر '21
+82
في 0 قنوات
Get PRO
سبتمبر '21
+1 729
في 0 قنوات
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 26 أكتوبر | 0 | |||
| 25 أكتوبر | +1 | |||
| 24 أكتوبر | +1 | |||
| 23 أكتوبر | +2 | |||
| 22 أكتوبر | 0 | |||
| 21 أكتوبر | +1 | |||
| 20 أكتوبر | +4 | |||
| 19 أكتوبر | +1 | |||
| 18 أكتوبر | +1 | |||
| 17 أكتوبر | 0 | |||
| 16 أكتوبر | 0 | |||
| 15 أكتوبر | +1 | |||
| 14 أكتوبر | +1 | |||
| 13 أكتوبر | +1 | |||
| 12 أكتوبر | +3 | |||
| 11 أكتوبر | 0 | |||
| 10 أكتوبر | 0 | |||
| 09 أكتوبر | +1 | |||
| 08 أكتوبر | +5 | |||
| 07 أكتوبر | 0 | |||
| 06 أكتوبر | 0 | |||
| 05 أكتوبر | +1 | |||
| 04 أكتوبر | +1 | |||
| 03 أكتوبر | 0 | |||
| 02 أكتوبر | 0 | |||
| 01 أكتوبر | +5 |
منشورات القناة
Bulkhead в Resilience4j: семафор или отдельный пул
Если одна внешняя интеграция заняла все рабочие потоки, остальные запросы тоже могут застрять. Bulkhead позволяет ограничить число одновременных вызовов к выбранной зависимости. Но отдельный пул потоков появляется не в каждой реализации.
SemaphoreBulkhead использует семафор и собственного пула не создаёт. В документации Resilience4j 2.2.0 у maxConcurrentCalls значение по умолчанию 25, у maxWaitDuration — 0. Первый параметр ограничивает одновременные выполнения, второй задаёт, сколько поток может ждать допуска, когда лимит исчерпан.
У FixedThreadPoolBulkhead есть собственный пул и ограниченная очередь. Здесь нужно согласовать размеры пула и queueCapacity. У семафорного варианта размер рабочего пула остаётся вашей заботой.
Такой лимит относится к конкурентным вызовам через конкретный bulkhead. Число запросов в секунду он не задаёт и пропускную способность внешнего сервиса не увеличивает.| 2 | Spring Boot: 20 секунд на фазу остановки
В настройке spring.lifecycle.timeout-per-shutdown-phase=20s легко прочитать обещание «приложение завершится за 20 секунд». Но это таймаут отдельной фазы остановки, а не общий лимит завершения процесса. Значение 20 секунд приведено в документации как пример.
Согласно справочнику Spring Boot 4.1.1, graceful shutdown включён по умолчанию для встроенных Jetty, Reactor Netty и Tomcat, в servlet- и reactive-приложениях. При закрытии контекста уже принятым HTTP-запросам дают время завершиться. Новые запросы эти серверы перестают принимать на сетевом уровне. При постоянных соединениях детали поведения могут отличаться.
Есть ловушка при проверке из IDE: кнопка Stop может оборвать процесс сразу, если среда не отправляет корректный SIGTERM. Поэтому сначала проверьте, какой сигнал получает приложение. Иначе принудительное завершение легко принять за ошибку в настройке graceful shutdown. | 507 |
| 3 | Testcontainers: одного withReuse(true) мало
Режим Reusable Containers оставляет контейнер работающим после тестов, чтобы следующий запуск мог использовать его снова. Но одного withReuse(true) в описании контейнера недостаточно.
Нужно разрешить reuse и в окружении: через TESTCONTAINERS_REUSE_ENABLE=true либо запись testcontainers.reuse.enable=true в пользовательском ~/.testcontainers.properties. Файл свойств в classpath для этого не подходит.
Контейнер запускают вручную через start(). Останавливать его нельзя ни прямым stop(), ни через try-with-resources или JUnit-интеграцию, которая завершит его за вас. При следующем запуске конфигурация должна совпадать.
В руководстве Testcontainers режим помечен как экспериментальный и неподходящий для CI. Очистка ресурсов и сеть могут работать не полностью. А сохранённый контейнер с базой ещё не означает чистые данные перед новым тестом: это отдельная задача тестового окружения. | 536 |
| 4 | Java-расширение Oracle разделяет JDK языкового сервера и проекта
Редактору может требоваться более новая Java, чем приложению. В Java Platform Extension от Oracle для VS Code эти настройки можно разделить.
jdk.jdkhome задаёт JDK языкового сервера и используется для проекта по умолчанию. А jdk.project.jdkhome позволяет выбрать отдельный JDK для сборки и запуска проекта.
Например, в настройках рабочего пространства:
{
"jdk.jdkhome": "/opt/jdk-27",
"jdk.project.jdkhome": "/opt/jdk-21"
}
Пути замените на свои. Самому расширению нужен JDK 21 или новее, при этом поддерживаются проекты на JDK 8 и выше.
Это пригодится, когда обновить инструменты уже можно, а приложение остаётся на прежней версии Java. Настройки Maven или Gradle при этом тоже нужно согласовать с выбранным JDK проекта.
#java #vscode #jdk | 562 |
| 5 | Payara Community убирает требование повышенных прав для SSH-узлов
В Payara Community 7.2026.10 управление SSH-узлами больше не требует повышенных прав. Для домена на нескольких хостах это упрощает настройку учётной записи, через которую сервер работает с удалённым узлом.
SSH-доступ и необходимые разрешения остаются нужны. Изменение убирает требование избыточных привилегий.
Ещё появились две команды asadmin для управления конфигурацией: delete-jvm-option и delete-system-properties. Исправлены проблемы с конкурентным развёртыванием и запуском приложений после перезапуска домена.
Ветка Community 7 остаётся на Jakarta EE 11 и MicroProfile 7.1. В статье отдельно перечислены обновления коммерческих веток Azul Payara — их исправления и возможности нужно сверять со своей редакцией.
#java #jakartaee #payara | 576 |
| 6 | Spring Tools 5.4 предлагает исправления для аннотаций контроллеров и тестов
Некоторые сочетания аннотаций Spring можно выразить короче и точнее. В Spring Tools 5.4.0 добавили проверки и быстрые исправления для перехода к @RestController, @SpringJUnitConfig, @ApplicationModuleListener и специализированным аннотациям области видимости.
Такие подсказки помогают замечать подходящие преобразования прямо в редакторе, не разыскивая каждое сочетание вручную.
Команда также ускорила ряд быстрых исправлений и проверку версий по репозиториям, улучшила надёжность индексации исходников. Дистрибутив для Eclipse обновили до Eclipse 2026-09.
Пригодится при поддержке существующего Spring-проекта: можно пройтись по диагностике и проверить предложенные изменения небольшими порциями. Применять их стоит с просмотром diff и запуском тестов.
#java #spring #инструменты | 579 |
| 7 | Pi4J 5 позволяет подменять оборудование при разработке на обычном компьютере
Код для GPIO и датчиков неудобно разрабатывать, если плата должна постоянно лежать рядом. В готовящейся Pi4J 5 добавили возможность использовать реальное оборудование, когда оно доступно, и переходить на заглушки на других системах.
Это помогает проверять логику приложения на рабочем компьютере. Физические подключения, временные характеристики и поведение датчика всё равно нужно проверять на плате.
Заодно команда упрощает API создания устройств: конфигурация собирается через newConfigBuilder() соответствующего типа, затем передаётся в context.create(...). Завершение работы тоже сводят к одному close().
Pi4J 5 пока находится в разработке, доступны snapshot-сборки. Дата финального релиза не объявлена, поэтому изменения API стоит учитывать до переноса рабочего проекта.
#java #pi4j #iot | 589 |
| 8 | В JDK 28 готовят простой JSON API для небольших задач
Прочитать JSON-конфигурацию, достать вложенное значение и сформировать небольшой документ — для таких случаев в JDK готовят собственный API разбора, навигации и генерации JSON.
В докладе Everyday JSON in Java Алан Бейтман и Виктор Кланг объясняют, какие задачи он должен закрыть и как подход с ориентацией на данные повлиял на устройство API.
Основной сценарий — простая работа с документом без подключения внешней библиотеки. Авторы отдельно подчёркивают: заменять существующие JSON-библиотеки целиком не планируют.
Для проекта с настройками сериализации, модулями Jackson и преобразованием сложных объектных моделей появление нового API ещё не означает готовой замены.
Для JDK 28 API готовится в статусе incubator. Интерфейс ещё может меняться; стабильной возможностью JDK 27 он не является.
#java #json #jdk28 | 625 |
| 9 | Helidon 27 переносит контекст с ThreadLocal на ScopedValue
Идентификатор запроса и другие данные контекста нужны в разных слоях приложения. При передаче через ThreadLocal важно правильно задать и завершить их жизненный цикл.
В Helidon 27 активный контекст фреймворка перенесли на ScopedValue. Значение привязано к ограниченной области выполнения, что помогает согласовать время жизни контекста с работой, для которой он нужен.
Использовать более новые механизмы Java позволило повышение базовой версии: Helidon 27 требует JDK 27.
Одновременно проект разделяет две линии развития. Helidon 27 — актуальная ветка с новыми возможностями, а Helidon 4.5 остаётся LTS-веткой для команд с более длинным циклом проверки и обновления.
Поэтому переход стоит планировать вместе с обновлением JDK и проверкой зависимостей сервиса.
#java #helidon #jvm | 642 |
| 10 | ИИ-ревьюер на Spring Boot превращает ответ модели в замечания к коду
Отправить diff модели — только начало. Чтобы результат оказался полезен на ревью, нужно связать каждое замечание с файлом, местом в коде и объяснением проблемы.
Автор CodeGuard AI описывает такой процесс на Java и Spring Boot: получить данные PR и изменения, собрать контекст, добавить правила проверки, разобрать ответ модели и подготовить ревью в GitHub.
Замечания хранятся в структурированном виде: что найдено, где, насколько серьёзно и насколько уверена модель. Провайдер вынесен за отдельную абстракцию — можно переключаться между OpenAI, Gemini и Ollama.
Полезная часть статьи — устройство всей цепочки вокруг модели. Структурированный ответ проще фильтровать и проверять, но оценка уверенности сама по себе не подтверждает, что найденная ошибка реальна.
#java #springboot #codereview | 623 |
| 11 | Spring Batch отсекает несовместимые настройки builder ещё при компиляции
Раньше некоторые взаимоисключающие настройки можно было записать в одной цепочке, а ошибку получить только на build().
В Spring Batch 6.1.0-M2 для нескольких builder-классов ввели поэтапный DSL. После выбора одной стратегии тип возвращаемого объекта ограничивает доступные следующие методы. Некорректную комбинацию теперь отвергает компилятор.
Изменение затрагивает FlatFileItemReaderBuilder, FlatFileItemWriterBuilder и JdbcBatchItemWriterBuilder.
При миграции проверьте код, который сохраняет промежуточный результат вызова в переменную с типом builder-класса: для него есть несовместимые изменения. Непрерывным цепочкам вызовов, по описанию команды, достаточно перекомпиляции.
M2 — предварительная версия. Хороший повод проверить совместимость до финального релиза.
#java #spring #batch | 611 |
| 12 | Gradle 9.8 использует настройки зеркал репозиториев из Maven
В компании есть внутреннее зеркало зависимостей, а проекты собираются и Maven, и Gradle? В ветке Gradle 9.8 настройки зеркал можно брать из Maven вместо отдельного описания в каждой сборке.
Включается в gradle.properties:
org.gradle.mirror.maven.settings=true
По умолчанию опция выключена. После включения Gradle заменяет адреса подходящих HTTP/HTTPS Maven-репозиториев по правилам зеркал. Это касается и репозиториев сборочных скриптов, и репозиториев в настройках и проектах.
На Ivy, Maven Local, каталоги с JAR-файлами и репозитории через S3/GCS механизм не распространяется.
При обновлении выбирайте патч 9.8.1: он исправляет уязвимости и регрессии первоначального релиза.
#java #gradle | 607 |
| 13 | Java-сервер с генерацией зависимостей при сборке
Маршруты HTTP и создание компонентов можно подготовить до запуска приложения. В разборе Codename One Backend показано, как аннотации превращаются в обычные Java-классы для маршрутизации и внедрения зависимостей.
Сгенерированный код создаёт объекты прямыми вызовами конструкторов. Отсутствующие зависимости, неоднозначный выбор компонента и циклы конструкторов приводят к ошибке сборки. Затем ParparVM переводит байткод в C для нативной компиляции.
Названия аннотаций напоминают Spring, но находятся в собственном пакете com.codename1.backend.annotations. Это отдельный развивающийся проект со своим набором возможностей.
В статье есть сравнение старта и памяти с Spring Boot, однако замеры сделаны на двух простых HTTP-обработчиках без базы, TLS и авторизации. Интереснее начать с устройства сгенерированного кода, а показатели своего сервиса проверить с его реальными зависимостями.
#java #производительность | 603 |
| 14 | 🔥 Почему ты получаешь отказ после «вроде норм собеса»?
Дело не всегда в знаниях. Можно знать правильный ответ, но не понимать, что именно хочет услышать интервьюер и как убедительно донести свою мысль.
Чтобы помочь с этим, ребята из ШОРТКАТ собрали 50 сложных вопросов с Java-собеседований и ответы сильного кандидата.
Они проанализировали более 100 мок-интервью и собрали в одном файле реальные вопросы и примеры ответов, на которые стоит ориентироваться при подготовке 🔥
🎁 Забирай файл бесплатно в боте 👉 @shortcut_sh_bot
А заодно сможешь зарегистрироваться на бесплатное тестовое собеседование с Java-разработчиком!
На эфире ты сможешь:
→ услышать, какие вопросы задают на собеседованиях в топовые компании;
→ посмотреть на интервью вживую;
→ лично задать вопросы ментору из бигтеха.
Забирай материалы и используй возможность подготовиться к следующему собесу 👇
@shortcut_sh_bot
Реклама.
О рекламодателе. | 544 |
| 15 | Spring AI: похожий документ ещё не содержит ответа
Векторный поиск нашёл текст по теме, но в ответ модели снова попала справочная информация вместо нужного факта. Для такого случая в примере Spring AI Modular RAG поиск разделён на несколько этапов.
Сначала модель переписывает вопрос для поиска и создаёт несколько его вариантов. Найденные фрагменты объединяются, после чего JevDocumentFilter отсеивает неподходящие, а JevDocumentReranker меняет порядок и оставляет лучшие.
Компоненты реализуют интерфейс DocumentPostProcessor и подключаются к RetrievalAugmentationAdvisor. Их можно менять отдельно от хранилища и модели, которая формирует ответ.
Есть полезная деталь: фильтрация и формирование контекста используют исходный вопрос пользователя. Переписанный запрос нужен только для поиска. В статье рядом лежат простая и модульная версии примера — удобно сравнить, какие фрагменты дошли до модели и почему часть была исключена.
#spring #java #rag | 679 |
| 16 | Quarkus 4: что проверить перед миграцией
Первая бета Quarkus 4 меняет базовые зависимости сразу в нескольких частях приложения. Минимальная версия Java теперь 21, сетевой стек переходит на Netty 4.2 и Vert.x 5.
В обзоре команды также перечислены Hibernate ORM 8, Jackson 3, CDI 5.0 и Jakarta REST 4. Поэтому обновление стоит начинать с проверки расширений, сериализации и работы с базой. Для перехода подготовлено отдельное руководство.
Из новых возможностей — HTTP/3, который включается явно, и Observation API: аннотация @Observed или программный интерфейс создают метрики и трассировки через Micrometer и OpenTelemetry. В Dev UI появилась встроенная панель наблюдения.
Релиз пока тестовый. Команда просит разработчиков расширений проверять совместимость, а пользователей — прогонять приложения и сообщать о проблемах. Хорошая задача для отдельной ветки: пройти миграцию и посмотреть на поведение интеграционных тестов.
#java #quarkus | 724 |
| 17 | Как HotSpot ускоряет криптографию внутри JDK
Реализация алгоритма написана на Java, но некоторые часто выполняемые операции JVM может заменить машинным кодом под конкретный процессор. Такой механизм называется intrinsic.
В статье команды Java он разобран на постквантовых ML-KEM, ML-DSA и HSS/LMS. У первых двух много повторяющихся операций с коэффициентами полиномов — подходящая работа для векторных инструкций. Проверка подписей HSS/LMS выигрывает от ускорения SHA-256.
Аннотация @IntrinsicCandidate отмечает методы, для которых HotSpot может применить такую замену. Java-реализация остаётся запасным вариантом, если подходящего ускорения на платформе нет.
В статье приведены замеры JDK 28 на Linux/AArch64. Они сравнивают отдельные алгоритмы с включёнными intrinsics и без них. При оценке результата важны набор параметров алгоритма и возможности CPU: ускорение криптографической операции само по себе не определяет скорость всего сервиса.
#java #jvm | 695 |
| 18 | Hibernate 8: проверки версий при конкурентных обновлениях
Оптимистическая блокировка должна обнаружить, что между чтением и записью сущность уже изменил другой запрос. Детали реализации и поведение базы здесь имеют значение.
В разборе изменений Hibernate 8 Beta2 команда описывает усиленные проверки версий: они учитывают ситуации, в которых конкурентное изменение раньше могло остаться незамеченным. Поддержку блокировки по версии получили StatelessSession и EntityAgent из Jakarta Persistence.
Ещё одно изменение касается параллельных upsert в StatelessSession: обработка учитывает гонку вставки. Для разделения данных по арендаторам их идентификаторы последовательно включаются в SQL изменения данных.
Это повод добавить к проверке миграции сценарии с одновременными обновлениями и вставками. Ветка Hibernate 8 пока тестовая; после описанной Beta2 уже вышла Beta3. Возможности из заметки полезно оценивать вместе с актуальным руководством по миграции.
#java #hibernate | 732 |
| 19 | Мониторинг Spring Boot на небольшом VPS
Для нескольких сервисов бывает достаточно видеть задержки, ошибки, память и перезапуски. В руководстве по StatLite показана панель, которая собирает эти данные из Spring Boot Actuator.
StatLite запускается одним Go-бинарником и хранит историю в SQLite. На стороне приложения нужны Actuator, Micrometer с prometheus-registry и доступные сборщику endpoints health и prometheus. Отдельный сервер Prometheus для этого варианта не требуется.
В конфигурации задаются адрес приложения, интервал опроса и тайм-аут. Панель по умолчанию привязана к localhost; доступ к Actuator тоже стоит ограничить сетью и аутентификацией.
Решение рассчитано на небольшой набор приложений. Для распределённых трассировок, централизованных журналов, сложных запросов к метрикам и маршрутизации оповещений понадобится более широкая система. В статье есть готовый демонстрационный Spring Boot-сервис с генератором трафика.
#spring #мониторинг | 713 |
| 20 | Jenesis: сборка Java-проекта из module-info.java
Имя модуля и его зависимости уже описаны в Java-коде. Рафаэль Винтерхальтер, автор Byte Buddy, предлагает использовать эту информацию и для сборки.
В знакомстве с Jenesis основным описанием проекта становится module-info.java. Дополнительные сведения, например главный класс, задаются тегами в Javadoc. Сам инструмент хранится в репозитории как Java-исходники и запускается на JDK 25+:
java build/jenesis/Make.java
Команда pin фиксирует версии зависимостей и контрольные суммы. Шаги сборки кешируются по входным данным, а для тестов инструмент определяет, какие из них затрагивает изменение.
Для знакомства не обязательно сразу переводить проект на модули: Jenesis умеет читать и pom.xml. В статье есть примеры многомодульной сборки, общего кеша и генерации кода. Перед переходом остаётся проверить, как инструмент справляется с особыми шагами именно вашей сборки.
#java #сборка | 703 |
