TornadoVM 2.0: GPU-ускорение и LLM для Java
InfoQ пишет о релизе TornadoVM 2.0 — инструменте для оффлоада Java на GPU/CPU/FPGA и JIT-компиляции в CUDA/OpenCL/SPIR‑V. В комплекте SDK и GPULlama3.java для LLM-инференса в чистом Java с поддержкой FP16 и квантованных моделей.
Подробности: https://www.infoq.com/news/2025/12/tornadovm-20-gpu-llm/
#en
@a_cup_of_java | Другие наши каналы
InfoQ пишет о релизе TornadoVM 2.0 — инструменте для оффлоада Java на GPU/CPU/FPGA и JIT-компиляции в CUDA/OpenCL/SPIR‑V. В комплекте SDK и GPULlama3.java для LLM-инференса в чистом Java с поддержкой FP16 и квантованных моделей.
Подробности: https://www.infoq.com/news/2025/12/tornadovm-20-gpu-llm/
#en
@a_cup_of_java | Другие наши каналы
Изменения цен на GitHub Actions
GitHub только что анонсировал изменения в ценообразовании Actions. Ранее GitHub Actions имел бесплатный control plane. Это означало, что если вы использовали GitHub Actions, но запускали задачи вне GitHub-hosted runners — будь то ваши собственные машины или в вашем собственном AWS аккаунте — вы ничего не платили GitHub за эти минуты; вы платили только за вычислительные ресурсы. Теперь подход изменился. Команда Spring АйО подготовила перевод анонса команды Github.
Читать: https://habr.com/ru/companies/spring_aio/articles/977674/?utm_campaign=977674
@a_cup_of_java | Другие наши каналы
GitHub только что анонсировал изменения в ценообразовании Actions. Ранее GitHub Actions имел бесплатный control plane. Это означало, что если вы использовали GitHub Actions, но запускали задачи вне GitHub-hosted runners — будь то ваши собственные машины или в вашем собственном AWS аккаунте — вы ничего не платили GitHub за эти минуты; вы платили только за вычислительные ресурсы. Теперь подход изменился. Команда Spring АйО подготовила перевод анонса команды Github.
Читать: https://habr.com/ru/companies/spring_aio/articles/977674/?utm_campaign=977674
@a_cup_of_java | Другие наши каналы
Большой гайд по мобильной разработке от Tproger: полезные статьи, практики и советы
Делимся нашими статьями про мобильную разработку: iOS, Android, Flutter, SwiftUI, Jetpack Compose, публикация в сторах и советы по доступности — всё в одном месте.
Читать: «Большой гайд по мобильной разработке от Tproger: полезные статьи, практики и советы»
@a_cup_of_java | Другие наши каналы
Делимся нашими статьями про мобильную разработку: iOS, Android, Flutter, SwiftUI, Jetpack Compose, публикация в сторах и советы по доступности — всё в одном месте.
Читать: «Большой гайд по мобильной разработке от Tproger: полезные статьи, практики и советы»
@a_cup_of_java | Другие наши каналы
Какие навыки в IT будут решающими в 2026 году: разбор по специализациям
Разбираем, какие скилы и знания станут обязательными в 2026 году, что будут ценить работодатели и как новичку не потеряться на входе в ИТ-индустрию
Читать: «Какие навыки в IT будут решающими в 2026 году: разбор по специализациям»
@a_cup_of_java | Другие наши каналы
Разбираем, какие скилы и знания станут обязательными в 2026 году, что будут ценить работодатели и как новичку не потеряться на входе в ИТ-индустрию
Читать: «Какие навыки в IT будут решающими в 2026 году: разбор по специализациям»
@a_cup_of_java | Другие наши каналы
👎3
Как мы перевернули подход к мобильным интерфейсам с Backend Driven UI
После того как наш парк вырос до более 245 тысяч самокатов и велосипедов, а команда сервисных центров начала исчисляться сотнями человек, стало ясно: управлять статусами устройств, задач и процессов в нашем внутреннем сервисном приложении по старинке уже не получится. Представьте себе: нужно изменить статус самоката или работы, а механик, специалист по контролю качества и бригадир — роли с разными функциями — видят одни и те же кнопки, одни и те же статусы, в которые можно перевести самокат. Иногда нажимают не туда — и ремонт идет не по желаемому процессу, что-то может потеряться, сроки увеличиваются… Добавим в уравнение еще разные версии мобильного приложения с различным набором кнопок — в какой-то версии кнопку убрали, в какой-то добавили. В итоге вся надежда только на бэкенд, перед которым встала задача контролировать и валидировать действие каждого пользователя в приложении.
В WCMA (Whoosh Control Maintenance App, писали о нем в предыдущей статье), нашем внутреннем приложении для управления флотом, мы столкнулись с этой проблемой в полной мере. Напомню, в этом приложении работает наша сервисная команда, через него мы обслуживаем самокаты и велосипеды в городе, следим за их зарядом, переставляем на спросовые парковки, а также восстанавливаем и чиним.
Одна из первых версий WCMA была больше похожа на пульт-отмычку для самоката, приложение не было интуитивным: все переводы доступны, а значит люди нажимали куда попало, часто новички путались в процессах и кнопках, в целом было мало контроля над действиями пользователей. Это могло вызывать ошибки “в полях” или при ремонте флота. Чтобы это исправить, мы завели большее количество ролей в системе, и каждая роль получила свой особенный раздел в WCMA. А для надежности добавили много проверок на бэкенде, валидирующих действия команды.
Такой подход работал, статусная модель была простой: несколько базовых состояний и переходы между ними. Но с ростом бизнеса логика усложнилась. Появились региональные особенности работы в разных городах, ролевые ограничения, условные переходы, зависящие от контекста.
Меня зовут Игорь Волынский, я backend-разработчик в команде WCMA Whoosh. И сегодня я расскажу, как мы решили эту проблему: построили централизованную и гибкую систему управления статусами, добавили условные переводы с хендлерами для проверки бизнес-правил и реализовали динамические сценарии для гибкого формирования UI. Спойлер: теперь наши механики и менеджеры видят только те действия, которые им реально доступны, а бэкенд гарантирует целостность данных на уровне системы.
Читать про формирование UI через бэкенд
Читать: https://habr.com/ru/companies/whoosh/articles/977814/?utm_campaign=977814
@a_cup_of_java | Другие наши каналы
После того как наш парк вырос до более 245 тысяч самокатов и велосипедов, а команда сервисных центров начала исчисляться сотнями человек, стало ясно: управлять статусами устройств, задач и процессов в нашем внутреннем сервисном приложении по старинке уже не получится. Представьте себе: нужно изменить статус самоката или работы, а механик, специалист по контролю качества и бригадир — роли с разными функциями — видят одни и те же кнопки, одни и те же статусы, в которые можно перевести самокат. Иногда нажимают не туда — и ремонт идет не по желаемому процессу, что-то может потеряться, сроки увеличиваются… Добавим в уравнение еще разные версии мобильного приложения с различным набором кнопок — в какой-то версии кнопку убрали, в какой-то добавили. В итоге вся надежда только на бэкенд, перед которым встала задача контролировать и валидировать действие каждого пользователя в приложении.
В WCMA (Whoosh Control Maintenance App, писали о нем в предыдущей статье), нашем внутреннем приложении для управления флотом, мы столкнулись с этой проблемой в полной мере. Напомню, в этом приложении работает наша сервисная команда, через него мы обслуживаем самокаты и велосипеды в городе, следим за их зарядом, переставляем на спросовые парковки, а также восстанавливаем и чиним.
Одна из первых версий WCMA была больше похожа на пульт-отмычку для самоката, приложение не было интуитивным: все переводы доступны, а значит люди нажимали куда попало, часто новички путались в процессах и кнопках, в целом было мало контроля над действиями пользователей. Это могло вызывать ошибки “в полях” или при ремонте флота. Чтобы это исправить, мы завели большее количество ролей в системе, и каждая роль получила свой особенный раздел в WCMA. А для надежности добавили много проверок на бэкенде, валидирующих действия команды.
Такой подход работал, статусная модель была простой: несколько базовых состояний и переходы между ними. Но с ростом бизнеса логика усложнилась. Появились региональные особенности работы в разных городах, ролевые ограничения, условные переходы, зависящие от контекста.
Меня зовут Игорь Волынский, я backend-разработчик в команде WCMA Whoosh. И сегодня я расскажу, как мы решили эту проблему: построили централизованную и гибкую систему управления статусами, добавили условные переводы с хендлерами для проверки бизнес-правил и реализовали динамические сценарии для гибкого формирования UI. Спойлер: теперь наши механики и менеджеры видят только те действия, которые им реально доступны, а бэкенд гарантирует целостность данных на уровне системы.
Читать про формирование UI через бэкенд
Читать: https://habr.com/ru/companies/whoosh/articles/977814/?utm_campaign=977814
@a_cup_of_java | Другие наши каналы
❤1
Один сервис — четыре стека: практический бенчмарк с SLO по p99 и Docker/JMeter
В статье я сравниваю четыре реализации одного и того же сервиса поверх PostgreSQL:
1. Spring MVC + JDBC
2. Spring WebFlux + R2DBC
3. Ktor + JDBC
4. Go + pgx
Все сервисы крутятся в Docker с одинаковыми ресурсными лимитами и прогоняются через один и тот же JMeter-план. Для каждого стека я ищу максимальный RPS при соблюдении SLO по p99-латентности.
Я подробно разбираю:
- как устроен стенд (Docker-compose, Postgres, Prometheus, Grafana, JMeter);
- как реализованы сервисы и чем различаются модели конкурентности;
- методологию нагрузочного тестирования и расчёта RPS@p99≤SLA;
- как реально ведут себя блокирующий стек, реактивный стек и Go под честной нагрузкой.
Читать: https://habr.com/ru/companies/domclick/articles/970104/?utm_campaign=970104
@a_cup_of_java | Другие наши каналы
В статье я сравниваю четыре реализации одного и того же сервиса поверх PostgreSQL:
1. Spring MVC + JDBC
2. Spring WebFlux + R2DBC
3. Ktor + JDBC
4. Go + pgx
Все сервисы крутятся в Docker с одинаковыми ресурсными лимитами и прогоняются через один и тот же JMeter-план. Для каждого стека я ищу максимальный RPS при соблюдении SLO по p99-латентности.
Я подробно разбираю:
- как устроен стенд (Docker-compose, Postgres, Prometheus, Grafana, JMeter);
- как реализованы сервисы и чем различаются модели конкурентности;
- методологию нагрузочного тестирования и расчёта RPS@p99≤SLA;
- как реально ведут себя блокирующий стек, реактивный стек и Go под честной нагрузкой.
Читать: https://habr.com/ru/companies/domclick/articles/970104/?utm_campaign=970104
@a_cup_of_java | Другие наши каналы
❤1
Настраиваем ИИ-помощника бесплатно и без вендорлока в IntelliJ IDEA, GoLand, WebStorm, OpenIDE и GigaIDE
AI-помощники в IDE — уже не фантастика, а ежедневная реальность. Но как сделать так, чтобы они действительно помогали, не лезли не в тему, не сливали код в облако и не требовали подписку на каждого чиха? Ответ — Continue: open source AI-ассистент, который интегрируется с IntelliJ IDEA, GoLand, WebStorm, OpenIDE и другими IDE на базе IntelliJ Platform.
Он предоставляет автодополнение, чат, команды над выделенными фрагментами и даже агентный режим с патчами на несколько файлов. Главное — вы выбираете модель и правила игры.
Читать: https://habr.com/ru/companies/haulmont/articles/978172/?utm_campaign=978172
@a_cup_of_java | Другие наши каналы
AI-помощники в IDE — уже не фантастика, а ежедневная реальность. Но как сделать так, чтобы они действительно помогали, не лезли не в тему, не сливали код в облако и не требовали подписку на каждого чиха? Ответ — Continue: open source AI-ассистент, который интегрируется с IntelliJ IDEA, GoLand, WebStorm, OpenIDE и другими IDE на базе IntelliJ Platform.
Он предоставляет автодополнение, чат, команды над выделенными фрагментами и даже агентный режим с патчами на несколько файлов. Главное — вы выбираете модель и правила игры.
Читать: https://habr.com/ru/companies/haulmont/articles/978172/?utm_campaign=978172
@a_cup_of_java | Другие наши каналы
👍3❤1
JEP 500: final станет по‑настоящему final
По InfoQ: в JDK 26 вводят запрет/ограничение на изменение final-полей через deep reflection — по умолчанию выдаётся предупреждение; доступны режимы warn/deny/allow и JFR-событие jdk.FinalFieldMutation для аудита.
Подробности: https://www.infoq.com/news/2025/12/jdk26-final-fields-reflection/
#en
@a_cup_of_java | Другие наши каналы
По InfoQ: в JDK 26 вводят запрет/ограничение на изменение final-полей через deep reflection — по умолчанию выдаётся предупреждение; доступны режимы warn/deny/allow и JFR-событие jdk.FinalFieldMutation для аудита.
Подробности: https://www.infoq.com/news/2025/12/jdk26-final-fields-reflection/
#en
@a_cup_of_java | Другие наши каналы
Spring Boot наконец получил нативную поддержку gRPC
Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.
В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.
Читать: https://habr.com/ru/companies/spring_aio/articles/978418/?utm_campaign=978418
@a_cup_of_java | Другие наши каналы
Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.
В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.
Читать: https://habr.com/ru/companies/spring_aio/articles/978418/?utm_campaign=978418
@a_cup_of_java | Другие наши каналы
🔥8
Java: 15 самых популярных докладов 2025 года на YouTube
От базовой прокачки производительности до работы с ИИ и данными. Все доклады доступны бесплатно на YouTube
Читать: «Java: 15 самых популярных докладов 2025 года на YouTube»
@a_cup_of_java | Другие наши каналы
От базовой прокачки производительности до работы с ИИ и данными. Все доклады доступны бесплатно на YouTube
Читать: «Java: 15 самых популярных докладов 2025 года на YouTube»
@a_cup_of_java | Другие наши каналы
👍2
CQRS на практике: как проектировать системы, которые не ломаются под нагрузкой
Привет, Хабр! Я сегодня хочу разобрать одну из самых мощных, но часто неправильно понимаемых архитектурных концепций — CQRS. Если вы уже переросли уровень «просто писать CRUD» и задумываетесь о том, как строить системы, которые будут масштабироваться и оставаться производительными — эта статья для вас.
Читать: https://habr.com/ru/articles/979062/?utm_campaign=979062
@a_cup_of_java | Другие наши каналы
Привет, Хабр! Я сегодня хочу разобрать одну из самых мощных, но часто неправильно понимаемых архитектурных концепций — CQRS. Если вы уже переросли уровень «просто писать CRUD» и задумываетесь о том, как строить системы, которые будут масштабироваться и оставаться производительными — эта статья для вас.
Читать: https://habr.com/ru/articles/979062/?utm_campaign=979062
@a_cup_of_java | Другие наши каналы
Java-дайджест: главные релизы и обновления
В обзоре InfoQ: GlassFish 8.0 milestone, TornadoVM 2.2, Spring Shell 4.0 RC1, бета WildFly 39, релизы Hibernate и Kotlin 2.3, сборки JDK 26/27, патчи Vert.x, Micronaut и Helidon — кратко о важных новинках для Java-разработчиков.
Подробности: https://www.infoq.com/news/2025/12/java-news-roundup-dec15-2025/
#en
@a_cup_of_java | Другие наши каналы
В обзоре InfoQ: GlassFish 8.0 milestone, TornadoVM 2.2, Spring Shell 4.0 RC1, бета WildFly 39, релизы Hibernate и Kotlin 2.3, сборки JDK 26/27, патчи Vert.x, Micronaut и Helidon — кратко о важных новинках для Java-разработчиков.
Подробности: https://www.infoq.com/news/2025/12/java-news-roundup-dec15-2025/
#en
@a_cup_of_java | Другие наши каналы
Архитектурный квиз: костыль или элегантное решение?
Отказоустойчивый и масштабируемый энтерпрайз невозможно спроектировать по книжкам. Одно и то же решение может фигурировать и в best, и в bad practice — и, что забавно, иногда переходит из одного списка в другой. Ещё недавно монолиты считались злом, а теперь снова в моде.
Хотите посмотреть, как знакомые паттерны ведут себя в реальном контексте?
Чтобы показать это на практике, я собрала три инженерных кейса. Каждый оформлен в формате детективного квиза: роль, фабула, вопросы на размышление, разбор и выводы. Попробуйте разобраться в проблеме, пройти тест и определить: где костыль, где инженерный компромисс, а где — настоящая best practice.
Читать: https://habr.com/ru/companies/oleg-bunin/articles/969692/?utm_campaign=969692
@a_cup_of_java | Другие наши каналы
Отказоустойчивый и масштабируемый энтерпрайз невозможно спроектировать по книжкам. Одно и то же решение может фигурировать и в best, и в bad practice — и, что забавно, иногда переходит из одного списка в другой. Ещё недавно монолиты считались злом, а теперь снова в моде.
Хотите посмотреть, как знакомые паттерны ведут себя в реальном контексте?
Чтобы показать это на практике, я собрала три инженерных кейса. Каждый оформлен в формате детективного квиза: роль, фабула, вопросы на размышление, разбор и выводы. Попробуйте разобраться в проблеме, пройти тест и определить: где костыль, где инженерный компромисс, а где — настоящая best practice.
Читать: https://habr.com/ru/companies/oleg-bunin/articles/969692/?utm_campaign=969692
@a_cup_of_java | Другие наши каналы
Spring Boot — жажда скорости. CDS и разгон на старте
Данная статья посвящена практическому изучению механизмов Class Data Sharing и AppCDS. В ней рассматривается, какие именно компоненты ускоряются CDS в HotSpot JVM, почему для Spring-приложений зачастую оказывается недостаточно использования «CDS по умолчанию», а также каким образом можно собрать
Отдельное внимание уделено теоретическим аспектам JIT-компиляции и tiered compilation, а также практической части с измерениями времени запуска. В качестве дополнения рассматривается влияние использования Spring AOT, а также переход на Java 25 и применение Spring AOT Cache.
Читать: https://habr.com/ru/companies/haulmont/articles/978528/?utm_campaign=978528
@a_cup_of_java | Другие наши каналы
Данная статья посвящена практическому изучению механизмов Class Data Sharing и AppCDS. В ней рассматривается, какие именно компоненты ускоряются CDS в HotSpot JVM, почему для Spring-приложений зачастую оказывается недостаточно использования «CDS по умолчанию», а также каким образом можно собрать
.jsa-архив для приложения - как в локальной среде, так и при работе с Docker.Отдельное внимание уделено теоретическим аспектам JIT-компиляции и tiered compilation, а также практической части с измерениями времени запуска. В качестве дополнения рассматривается влияние использования Spring AOT, а также переход на Java 25 и применение Spring AOT Cache.
Читать: https://habr.com/ru/companies/haulmont/articles/978528/?utm_campaign=978528
@a_cup_of_java | Другие наши каналы
Инсайды Саймона Риттера (InfoQ): что нового в OpenJDK и JCP
В подкасте обсуждаются работа JCP Expert Group, шестимесячные релизы, Generational Shenandoah, улучшения JDK Flight Recorder, Project Leyden и CRaC (AOT и снапшоты), изменения в JDK 25/26, паттерн‑матчинг и Compact Object Headers.
Подробности: https://www.infoq.com/podcasts/latest-open-java-development-kit/
#en
@a_cup_of_java | Другие наши каналы
В подкасте обсуждаются работа JCP Expert Group, шестимесячные релизы, Generational Shenandoah, улучшения JDK Flight Recorder, Project Leyden и CRaC (AOT и снапшоты), изменения в JDK 25/26, паттерн‑матчинг и Compact Object Headers.
Подробности: https://www.infoq.com/podcasts/latest-open-java-development-kit/
#en
@a_cup_of_java | Другие наши каналы
Замещение Pega, или Реинжиниринг онлайн
Импортозамещение крупных зарубежных платформ является одной из приоритетных задач для российского бизнеса. Сбер успешно мигрировал систему с иностранной платформы Pega на собственную разработку Platform V. Опыт реализации проекта станет полезным руководством для руководителей проектов, инженеров, аналитиков, архитекторов и специалистов, работающих над крупными ИТ-решениями.
Изгнание Пегаса - реинжениринг
Читать: https://habr.com/ru/companies/sberbank/articles/977386/?utm_campaign=977386
@a_cup_of_java | Другие наши каналы
Импортозамещение крупных зарубежных платформ является одной из приоритетных задач для российского бизнеса. Сбер успешно мигрировал систему с иностранной платформы Pega на собственную разработку Platform V. Опыт реализации проекта станет полезным руководством для руководителей проектов, инженеров, аналитиков, архитекторов и специалистов, работающих над крупными ИТ-решениями.
Изгнание Пегаса - реинжениринг
Читать: https://habr.com/ru/companies/sberbank/articles/977386/?utm_campaign=977386
@a_cup_of_java | Другие наши каналы
Как ускорить MongoDB в Java: profiling, explain(), индексация и антипаттерны
Команда Spring АйО подготовила материал о том, почему «быстрый запрос в MongoDB» — это не магия, а дисциплина: индексы, форма запроса, проекции, explain(), профайлер и наблюдаемость в Java/Spring Boot. Разбираем, как отличать IXSCAN от COLLSCAN, где чаще всего прячутся антипаттерны (skip-пагинация, тяжёлые $regex/$nin, findAll), и как выстроить измеримый цикл оптимизаций от Atlas/Compass до Micrometer.
Читать: https://habr.com/ru/companies/spring_aio/articles/979440/?utm_campaign=979440
@a_cup_of_java | Другие наши каналы
Команда Spring АйО подготовила материал о том, почему «быстрый запрос в MongoDB» — это не магия, а дисциплина: индексы, форма запроса, проекции, explain(), профайлер и наблюдаемость в Java/Spring Boot. Разбираем, как отличать IXSCAN от COLLSCAN, где чаще всего прячутся антипаттерны (skip-пагинация, тяжёлые $regex/$nin, findAll), и как выстроить измеримый цикл оптимизаций от Atlas/Compass до Micrometer.
Читать: https://habr.com/ru/companies/spring_aio/articles/979440/?utm_campaign=979440
@a_cup_of_java | Другие наши каналы
Путевые заметки о знакомстве со Spring Data R2DBC
Привет, Хабр! Меня зовут Каненков Александр, я backend-разработчик в Домклик. Не так давно я резко и с головой погрузился в мир реактивного программирования и очень заинтересовался этой темой. Хочу поделиться кратким введением в Spring Data R2DBC, зачем это нужно, как начать использовать и какие преимущества даёт. Мы разработаем небольшое приложение, добавим flyway и напишем пару тестов.
Читать: https://habr.com/ru/companies/domclick/articles/966514/?utm_campaign=966514
@a_cup_of_java | Другие наши каналы
Привет, Хабр! Меня зовут Каненков Александр, я backend-разработчик в Домклик. Не так давно я резко и с головой погрузился в мир реактивного программирования и очень заинтересовался этой темой. Хочу поделиться кратким введением в Spring Data R2DBC, зачем это нужно, как начать использовать и какие преимущества даёт. Мы разработаем небольшое приложение, добавим flyway и напишем пару тестов.
Читать: https://habr.com/ru/companies/domclick/articles/966514/?utm_campaign=966514
@a_cup_of_java | Другие наши каналы
Spring MCP, лучший HTTP-клиент и поддержка MyBatis
Amplicode 2025.3 — релиз про новые фичи для Spring Data JDBC, улучшения для HTTP-клиента Connekt (между прочим, убийца Postman), поддержку MyBatis и новые возможности по работе с инфраструктурой вокруг Kubernetes и Terraform.
Ниже — ключевые изменения по блокам.
Читать: https://habr.com/ru/companies/haulmont/articles/980066/?utm_campaign=980066
@a_cup_of_java | Другие наши каналы
Amplicode 2025.3 — релиз про новые фичи для Spring Data JDBC, улучшения для HTTP-клиента Connekt (между прочим, убийца Postman), поддержку MyBatis и новые возможности по работе с инфраструктурой вокруг Kubernetes и Terraform.
Ниже — ключевые изменения по блокам.
Читать: https://habr.com/ru/companies/haulmont/articles/980066/?utm_campaign=980066
@a_cup_of_java | Другие наши каналы
Весь год вы носили худи и джинсы… Хватит!
Заглядывайте к нам в виртуальную примерочную и выбирайте себе идеальный скин для встречи Нового года!
Делитесь в комментариях, какой скин вам выпал 👀
Реклама
Заглядывайте к нам в виртуальную примерочную и выбирайте себе идеальный скин для встречи Нового года!
Делитесь в комментариях, какой скин вам выпал 👀
Реклама
🌭1
Разделяй и тестируй: @DataJpaTest и @WebMvcTest для быстрых тестов Spring Boot
Привет, Хабр! Cегодня рассмотрим, как ускорить интеграционные тесты в Spring Boot с помощью специальных slice аннотаций.
Начнём с того, почему вообще тесты могут быть медленными. Используя @SpringBootTest, мы просим Spring Boot поднять весь контекст приложения для каждого тестового класса. У нас доступны все бины, но часто все это избыточно. Например, хочется протестировать контроллер, а Spring загружает ещё и базу данных, и сервисы, и шлёт запросы к Kafka. В результате простой тест метода контроллера может запускаться несколько секунд, пока поднимется веб‑сервер, инициализируется база, подтянутся все классы.
Эту проблему осознали и добавили так называемые test slice‑аннотации. Все простоб грузим не весь контекст, а только срез приложения, например, только веб‑слой или только слой доступа к данным. Spring Boot содержит готовые slice‑аннотации для основных слоёв: @WebMvcTest для веб, @DataJpaTest для JPA‑репозиториев, и ещё пачку для других случаев.
Рассмотрим на примерах двух интересных слайса: @DataJpaTest и @WebMvcTest.
Читать: https://habr.com/ru/companies/otus/articles/978616/?utm_campaign=978616
@a_cup_of_java | Другие наши каналы
Привет, Хабр! Cегодня рассмотрим, как ускорить интеграционные тесты в Spring Boot с помощью специальных slice аннотаций.
Начнём с того, почему вообще тесты могут быть медленными. Используя @SpringBootTest, мы просим Spring Boot поднять весь контекст приложения для каждого тестового класса. У нас доступны все бины, но часто все это избыточно. Например, хочется протестировать контроллер, а Spring загружает ещё и базу данных, и сервисы, и шлёт запросы к Kafka. В результате простой тест метода контроллера может запускаться несколько секунд, пока поднимется веб‑сервер, инициализируется база, подтянутся все классы.
Эту проблему осознали и добавили так называемые test slice‑аннотации. Все простоб грузим не весь контекст, а только срез приложения, например, только веб‑слой или только слой доступа к данным. Spring Boot содержит готовые slice‑аннотации для основных слоёв: @WebMvcTest для веб, @DataJpaTest для JPA‑репозиториев, и ещё пачку для других случаев.
Рассмотрим на примерах двух интересных слайса: @DataJpaTest и @WebMvcTest.
Читать: https://habr.com/ru/companies/otus/articles/978616/?utm_campaign=978616
@a_cup_of_java | Другие наши каналы