Обновить
150.96

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Инженерия создания микросервиса spring-web-flux

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели6.8K

Создать Spring-сервис просто: существует масса статей и отличная документация. Однако среди всего этого многообразия материалов зачастую сложно разобраться, какой именно набор технологий лучше выбрать и каким образом эти технологии должным образом интегрировать друг с другом. После перехода на новые версии библиотек многое начинает функционировать иначе, появляются совершенно другие подходы. В данной статье я хочу продемонстрировать один из возможных способов разработки микросервиса в 2026 году, а также рассмотреть несколько инструментов автоматической генерации кода: OpenApiGenerator, JooqCodegen, GigaChat, Liquibase — и объяснить, как они работают вместе в рамках единого проекта.

Точкой отсчета для построения микросервиса сделаем описание REST API. Допустим, в нашем фантастическом мире аналитик заранее подготовил спецификацию API с помощью формата OpenAPI, хотя подобное встречается и в реальной практике.

Читать далее

Новости

Под капотом многопоточной синхронизации в Java: как потоки договариваются через Mark Word

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели11K

Когда вы пишете synchronized(obj), под капотом происходит целая цепочка событий, которую можно отследить до Mark Word — восьмибайтового служебного поля в каждом Java-объекте. В современных реализациях JVM (таких как HotSpot, OpenJ9, GraalVM) используется динамическая, адаптивная система, которая выбирает наиболее эффективную стратегию блокировки в зависимости от реального поведения потоков.

Читать далее

Easy Maven — Dependencies Search. Или воскрешаем Maven Dependency Helper плагин

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели8.4K

Всем привет! Недавно я опубликовал статью, в которой сказал что она будет последней по Easy Maven т.к. все что можно я уже делегировал Maven — импорт проекта, запуск тасков, анализ зависимостей. Но недавнее обилие багов в IDEA 2025.3 связанных как с зависанием так и повышенным потреблением памяти Maven проектами, окунуло меня в баг трекер IDEA, где я нашел много похожих проблем, которые также затрагивают и мавен индексы. Помню как меня самого это раздражало, когда IDEA чуть ли не при каждом открытии, начинает сканировать локальный репозиторий. Про это даже писали в комментариях — где ответ был один — отключить это. Плюс недавно один из постов в тг канале (спасибо за это @javadev), еще больше убедил меня в том, что так дальше жить нельзя и я решил поправить проблему поиска зависимостей так как я ее вижу — не изобретать велосипед, а делегировать поиск туда, где это уже реализовано. Ведь как известно: самый лучший код — тот который ты не написал. Посмотрим что из этого вышло.

Читать далее

Ускоряем индексацию нодлистов Фидонета при помощи Java Streams и Spring Data JDBC: перебираем нодлисты прямиком с СУБД

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели11K

Привет, это снова Егор. И да - это снова статья про Фидонет. Так уж сложилось, что именно эта тематика оказался слишком уж популярным на моём Хабре, и неразрывно связана со мной, хотя я всячески пытался "сбежать" от данной тематики.

Однако я решил совместить приятное с полезным - рассказать про недавние мои поправки в NodehistJ, которые значительно ускорит индексацию диффов нодлистов сети Фидонет, а также значительно снизит потребление ОЗУ, за счёт одного из лучших вещей, которая есть в Spring Data JDBC - live streaming данных с СУБД без использования неэффективной пагинации. Данная технология позволяет быстро перебирать нодлисты за считанные минуты, и ускорить индексацию даже на слабых серверах, за счёт прямого перебора данных из СУБД, в live-режиме, без использования неэффективной пагинации, но с использованием самых обычного Java Streams.

Читать далее

От Чёрного моря до Невы: история одного комьюнити-тура

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.5K

Привет, Хабр!

2025 год выдался богатым на конференции и митапы, которые мы успели посетить, а некоторые даже организовать. В этой статье мы совершим небольшой тур по городам и событиям этого года, важным для нашей команды.

Buckle up, folks!

Читать далее

Плагины с человеческим лицом: истории комьюнити OpenIDE

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели7.3K

Мы в OpenIDE хорошо понимаем, что среда разработки — это не просто набор инструментов и функций. Это пространство, в котором разработчик проводит значительную часть своего времени: думает, экспериментирует, ошибается и создаёт новое. Именно поэтому для нас особенно важны открытость, доступность и ощущение живого диалога внутри экосистемы. 

IDE - это не только кодовый редактор, вспомогательные инструменты и графические интерфейсы. IDE - это комьюнити. Люди, которые расширяют возможности платформы, находят нестандартные решения, закрывают реальные боли и делятся своим опытом с другими. Именно они превращают среду разработки из продукта в экосистему — живую и дышащую.

И когда до Нового года остаётся совсем немного времени, а сил на сложные технические материалы почти не остаётся, мы решили немного сменить ритм. Вместо глубоких разборов — лёгкое, тёплое и предпраздничное чтение. Так появилась идея серии интервью с участниками нашего комьюнити — людьми, которые создают плагины для OpenIDE.

Читать далее

Очарованные Hibernate: проблемы, которые ведут разработчика странствовать по production

Уровень сложностиСредний
Время на прочтение41 мин
Охват и читатели8.9K

Hibernate часто работает как надо ровно до того момента, пока не приходит настоящая нагрузка. И тогда выясняется, что безобидные на вид решения отключают batching, ломают пагинацию, умножают число запросов и даже незаметно открывают дополнительные транзакции — ровно там, где вы рассчитывали на один аккуратный запрос в рамках одного unit of work.

В этой статье мы постарались собрать добрую дюжину самых неочевидных и при этом действительно продакшн-критичных ошибок работы с Hibernate: как они проявляются в логах и метриках, почему возникают на уровне механики ORM, и какие предохранители помогут поймать их до релиза. Будет практично, предметно и с несколькими моментами, после которых захочется пересмотреть пару любимых паттернов в вашем проекте.

поехали ...

PostgreSQL. Интервальный тип данных. Интеграция с Spring Data JPA

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели8.6K

В своей практике мы можем сталкиваться с хранением и поиском информации задаваемой в интревальном формате. Например: срок действия акций, тарифы на доставку и прочее. В статье мы подружим Spring JPA и Range Types.

Читать далее

Hidden классы в Java. Что скрывают Lambda выражения

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.9K

С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего Unsafe::defineAnonymousClass

Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность Unsafe, они лежат в основе ряда важных механизмов, такие как, например, реализация лямбд в JDK.

Подробнее - в новом переводе от команды Spring АйО.

Читать далее

10 самых интересных ошибок в Java проектах за 2025 год

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели8.5K

2025 год подходит к концу. Minecraft моды, каталонский язык и неочевидные взаимодействия с тернарным оператором — с чем только не успел познакомиться наш анализатор. А значит, самое время вам об этом рассказать — представляем топ-10 ошибок, которые нашёл анализатор PVS-Studio в Open Source проектах за 2025 год.

Читать далее

Как я мигрировал COBOL-код мейнфрейма на Java: разные подходы и почему ANTLR — лучший выбор

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.6K

Когда я работал в одной зарубежной компании, мне поставили задачу мигрировать COBOL‑систему расчета инвойсов с мейнфрейма на Java. Она звучала довольно просто: «Нужно переписать старый COBOL‑код на Java, чтобы система жила дальше».

Я тогда подумал, что это будет очередная рутина — взять дремучее легаси, аккуратно переложить его на современную версию Java, возможно, чуть подчистить архитектуру, внести небольшие косметические правки и закрыть задачу. В голове уже созрел рабочий план: пара итераций по автогенерации кода с помощью нейронки и готово. В общем, казалось, что ничего особенного.

Читать далее

Новый open source Java коннектор для Tarantool: практика с примерами кода

Время на прочтение28 мин
Охват и читатели5.1K

VK Tech открывает исходный код коннектора Tarantool Java EE и переименовывает его в Tarantool Java SDK. Дистрибутив станет доступен в Maven Central, что упростит интеграцию с Java-приложениями в корпоративных средах. 

Меня зовут Артём Дубинин, я старший программист в VK Tech. Я разрабатываю коннекторы к Tarantool, а также участвую в разработке различных продуктов в VK Tech. Однажды я понял, что материала про совместную работу Java и Tarantool очень мало и из-за этого может казаться, что совмещать их сложно. Но на самом деле это не так — и иногда альтернативы Tarantool могут быть даже сложнее во взаимодействии. Поэтому я и решил написать эту статью. 

Цель статьи — показать через код, что Tarantool реально совместить с Java без больших полотен кода, а итеративно с небольшими сниппетами (не считая java импортов и xml 😄). Мы будем использовать такие, чтобы каждый мог попробовать провести у себя на компьютере эти эксперименты и понять, что Tarantool легок в использовании.

Читать далее

Почему я перешел на Dagger Components (вместо Dagger Android)

Время на прочтение10 мин
Охват и читатели6.3K

Всем привет, меня зовут Анатолий Спитченко, я Android-разработчик в ПСБ. В этой статье расскажу про свои эксперименты с Dagger. Наткнувшись в проекте на огромный модуль Application (11,5 Мб), я стал искать альтернативы обертке Dagger Android. Поэкспериментировал с продвигаемым Google Dagger Hilt, а также с более старым подходом — Dagger Components. Последний, как ни странно, позволяет немного сократить Application и в целом имеет больше плюсов, чем минусов. Подробности под катом.

Читать далее

Ближайшие события

Тред-дампы и Project Loom (виртуальные потоки)

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели8.1K

С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше. Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО.

Читать далее

Эволюция схемы данных в AVRO, как меняться без проблем?

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели4.5K

Привет, Хабр! Меня зовут Владислав, я занимаюсь разработкой расчётных систем в Мир Plat.Form. Два года назад мы перешли от взаимодействия через REST к использованию Kafka между системой Фронт-Офиса, в которой хранятся данные об авторизованных транзакциях, и системой Бэк-Офиса, ответственной за выполнение клиринга. При этом мы реализовали собственный сериализатор для работы с AVRO сообщениями. Более подробно о причинах выбора такого подхода я рассказал в статье.

Тогда нам не требовалась поддержка изменения схемы данных, так как контракт взаимодействия был стабильным на протяжении нескольких лет.

Но в прошлом году перед нами встала задача внедрения новой интеграции, что могло повести за собой частые изменения в модели данных, из-за чего нам пришлось пересмотреть подход к работе с AVRO сообщениями.

В этой статье я расскажу:

1. Что такое эволюция данных и почему она критична для Kafka при работе с AVRO сообщениями.

2. Какие варианты решения мы рассмотрели.

3. Как реализовали поддержку изменений схемы.

4. Подводные камни, с которыми столкнулись, и как их обошли.

Читать далее

ИИ-помощники на маркетплейсе GigaIDE: обслуживание кода

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели4.5K

В прошлой статье мы рассказали, какие группы плагинов есть на маркетплейсе GigaIDE. Их количество постоянно растёт — как за счёт open source-плагинов, ранее доступных у JetBrains, так и за счёт собственных разработок. Именно оригинальным плагинам мы и посвятим цикл статей.

Начнём с группы ИИ-помощников — плагинов, которые используют возможности GigaCode для автоматической работы с кодом. Все они бесплатны, но для работы требуют активированный GigaCode.

Читать далее

Больше ядер, а не более быстрые ядра

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели13K

Команда Spring АйО подготовила перевод статьи в которой автор разбирает, где параллельные стримы действительно масштабируются, а где создают накладные расходы, конкуренцию за ресурсы и иллюзию производительности. Коротко: сначала аналитика и измерения, потом — параллелизм.

Читать далее

Разделяй и тестируй: @DataJpaTest и @WebMvcTest для быстрых тестов Spring Boot

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.5K

Привет, Хабр! Cегодня рассмотрим, как ускорить интеграционные тесты в Spring Boot с помощью специальных slice аннотаций.

Начнём с того, почему вообще тесты могут быть медленными. Используя @SpringBootTest, мы просим Spring Boot поднять весь контекст приложения для каждого тестового класса. У нас доступны все бины, но часто все это избыточно. Например, хочется протестировать контроллер, а Spring загружает ещё и базу данных, и сервисы, и шлёт запросы к Kafka. В результате простой тест метода контроллера может запускаться несколько секунд, пока поднимется веб‑сервер, инициализируется база, подтянутся все классы.

Эту проблему осознали и добавили так называемые test slice‑аннотации. Все простоб грузим не весь контекст, а только срез приложения, например, только веб‑слой или только слой доступа к данным. Spring Boot содержит готовые slice‑аннотации для основных слоёв: @WebMvcTest для веб, @DataJpaTest для JPA‑репозиториев, и ещё пачку для других случаев.

Рассмотрим на примерах двух интересных слайса: @DataJpaTest и @WebMvcTest.

Читать далее

Spring MCP, лучший HTTP-клиент и поддержка MyBatis

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.1K

Amplicode 2025.3 — релиз про новые фичи для Spring Data JDBC, улучшения для HTTP-клиента Connekt (между прочим, убийца Postman), поддержку MyBatis и новые возможности по работе с инфраструктурой вокруг Kubernetes и Terraform.

Ниже — ключевые изменения по блокам.

Читать далее

Путевые заметки о знакомстве со Spring Data R2DBC

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.6K

Привет, Хабр! Меня зовут Каненков Александр, я backend-разработчик в Домклик. Не так давно я резко и с головой погрузился в мир реактивного программирования и очень заинтересовался этой темой. Хочу поделиться кратким введением в Spring Data R2DBC, зачем это нужно, как начать использовать и какие преимущества даёт. Мы разработаем небольшое приложение, добавим flyway и напишем пару тестов.

Читать далее
1
23 ...

Вклад авторов