Java

Масштабирование NIO-потоков Reactor-Netty в docker-контейнере и getAvailableProcessors()

При подготовке использовались материалы статьи “CPU considerations for Java applications running in Docker and Kubernetes”, автор – Christopher Batey. Reactor-netty Как гласит Википедия, Netty – это неблокирующий, event-driven, клиент-серверный фреймворк для разработки сетевых Java-приложений. Reactor-Netty, в свою очередь – TCP/HTTP/UDP клиент /сервер, который использует Java Reactor поверх Netty. Для обеспечения...

Continue reading...

Как перестать беспокоится и начать работать с лямбда-выражениями в Java

Это – перевод статьи How to start working with lambda expressions, автора Luis Santiago. Прежде чем лямбда-выражения появились в Java 8 я успел попробовать их аналоги в других языках, например в C# и C++. Появление лямбда-выражений расширило синтаксис Java, придав ему дополнительную выразительность. В этой статье я хочу сосредоточиться на...

Continue reading...

Внедрение зависимостей в класс, не являющийся частью контекста Spring

Или, другими словами, как быть, если внедрить зависимость нужно, а класс собирается где-то в недрах проекта через new, то есть контекст Spring о нём даже не догадывается (а значит и никаких зависимостей в него не добавляет)? А столкнулся я с этим на текущем проекте. Есть некий клиентский API для работы...

Continue reading...

Метрики асинхронных вызовов в Spring WebFlux (Java Reactor)

Существует множество фреймворков для работы с метриками Java-приложений (например Micrometer, который, к тому же, еще и включён в новые версии Spring Boot). Но когда дело доходит до мониторинга времени выполнения асинхронных запросов у некоторых (у меня!) сразу возникает множество проблем. Передо мной стояла задача настроить JMX-мониторинг для отслеживания асинхронных вызовов...

Continue reading...

Backpressure в Spring WebFlux (Java Reactor)

Оригинальные источники: StackOverflow, Medium [Jay Phelps], StackOverflow Backpressure (back pressure) – это то, с чем рано или поздно сталкивается почти любой разработчик, а для некоторых это становится частой и серьезной проблемой. В мире программирования термин “backpressure” является аналогией, позаимствованной из физики. В двух словах, backpressure – это сопротивление или некоторая...

Continue reading...

Что скрывает @SpringBootApplication

Автоматическая конфигурация в Spring Boot существенно облегчает жизнь разработчика, исключая так называемый “настроечный boilerplate” из повседневной рутины. Для запуска и конфигурирования приложения на Spring Boot хватит двух аннотаций: Аннотация @SpringBootApplication включает сканирование компонентов и автоматическую конфигурацию приложения. На самом деле, за этой аннотацией скрывается целых три: @Configuration (Spring) – помечает...

Continue reading...

Intellij IDEA + JUnit 4 + Gradle: Test events were not received

Столкнулся с проблемой, когда при попытке запустить цель test в gradle-проекте тесты не выполняются с сообщением Test events were not received. Такое может происходить потому, что тестируемые классы проекта не изменились с момента предыдущего запуска unit-тестов. Для очистки результатов всех тестов нужно запустить цель cleanTest. Подробнее можно почитать здесь.

Continue reading...

java.lang.NoClassDefFoundError: Could not initialize class

Недавно я столкнулся с проблемой при отладке интеграции с одним из сторонних приложений, которое поставляется ‘as is’ и работает на IBM WebSphere. Оно использует внутренние JMS-очереди сервера для коммуникации с нашими приложениями, развернутыми там же. При миграции на новую версию сервера я столкнулся с NoClassDefFoundError, возникающей в одном из классов...

Continue reading...

Многопоточность в Java

Это – перевод статьи “Threading in Java” автора Beka Kodirov. Вторая часть статьи находится здесь. Чем отличается поток от процесса? Процессы были разработаны для обеспечения многозадачности в операционных системах. Все приложения живут в рамках процессов, а память и ЦПУ выделяются напрямую ядром ОС. При желании можно запустить часть вашего приложения...

Continue reading...