Все потоки
Поиск
Написать публикацию
Обновить
203.02

Java *

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

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

Explyt Spring Plugin. Патчим байткод Spring или как мы улучшили распознавание контекста приложений

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

Всем привет! Одной из уникальных особенностей нашего плагина, является практически стопроцентное понимание контекста Spring приложений. Где мы максимально нативным способом, через публичное Spring Boot Api, смогли получить доступ к контексту приложения и использовали эту информацию у себя в плагине для поддержки Spring Dependency Injection и навигации к «бинам». Но время не стоит на месте, и мы сделали еще один шаг в сторону улучшения распознавания Spring Context, путем модификации текущего байт‑кода Spring через параметр jvm: -javaagent, который позволил избавиться нам от большинства недостатков текущего подхода, кому интересно узнать детали реализации, то добро пожаловать под кат.

Читать далее

SAML2 ещё жив?! Как интегрировать Keycloak со Spring Boot в 2025 году

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров2.3K

Команда Spring АйО перевела статью совместном использовании Spring Boot, SAML2 и Keycloak при запуске приложений. Здесь также приводятся некоторые кастомизированные решения, позволяющие более гибко работать с упомянутым набором технологий.

Читать далее

Реализация RPC во внутреннем взаимодействии модулей с Spring Boot

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

В какой-то момент я настолько устал настраивать все эти мелочи для REST-взаимодействия в микросервисах, что реализовал механизм, который сильно упрощает эту работу.

И я уверен, что вам стоит прочитать эту статью, если:

Вы используете Java и Spring Boot в своей работе.

Ваш проект строится на микросервисной архитектуре.

Вас раздражает бесконечное описание REST-контрактов и их поддержку.

А если у вас остались шрамы после попыток внедрения gRPC, то тем более рекомендую дочитать до конца.

В статье мы рассмотрим альтернативный подход к взаимодействию между сервисами — легковесное RPC-решение, которое удобно использовать внутри одного продукта. Оно не претендует на замену публичных API, но значительно упрощает жизнь внутри команды, где "правила игры" можно обсудить за кружкой пива.

Читать далее

Инъекция блокнотом или история о том, как мы новые диагностики делали

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

В этой статье я немного расскажу о том, как в Java осуществляется вызов команд уровня операционной системы. Также поговорим про OS Command и Argument Injections и про то, как мы делали диагностики, которые могут помочь в их обнаружении.

Читать далее

Сравнение SpringRunner со SpringExtension и @SpringBootTest

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

Команда Spring АйО перевела статью о том, как и когда использовать SpringRunner, SpringExtension и @SpringBootTest, когда их целесообразно комбинировать и как правильное понимание этих компонентов может помочь сделать тесты проще, быстрее и более узконаправленными.

Читать далее

Создаем Spring Boot Starter для Kafka с Avro: пошаговое руководство

Уровень сложностиСредний
Время на прочтение27 мин
Количество просмотров2.8K

Интеграция Apache Kafka в проекты на Spring Boot часто требует много boilerplate-кода.

В этой статье я делюсь опытом создания кастомного стартера kafka-spring-boot-starter, который упрощает настройку продюсера и консюмера Kafka с поддержкой Avro-сериализации.

Рассказываю, как решал проблемы с тестами (например, auto.offset.reset=latest) и адаптировал стартер для гибкой работы со схемами.

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

Бонус в конце — удобный обзор ключевых настроек Kafka для продюсера и консюмера.

Читать далее

Подводный камень в docker env и java

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

Столкнулся с небольшим и интересным моментом: внедрение переменных окружения (а ля environment variables) в стандартный микросервис написанный на Java (классика жанра – Spring Boot).

Читать далее (Тема не сложная)

Как мы перестроили комментарии в ОК: от линейного хаоса к веточной гармонии

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

Комментарии в соцсетях — это как чипсы: начал читать, остановиться невозможно. Но в ОК до 2024 года они были плоскими — вместо структурированного диалога под постом пользователи видели бесконечную ленту сообщений, где ответы терялись в хронологическом порядке. Представьте: под постом про котиков кто-то спросил про корм, но ответ на вопрос появился в самом низу, через 500 комментариев с обсуждением хвостатых. Найти ответ на вопрос в такой системе, если он вообще существует, — тот ещё квест.

Меня зовут Александр Косницкий. Я разработчик в компании ОК. В этой статье я расскажу, как мы переходили с линейной структуры отображения комментариев к древовидной: с чего начали, с чем сталкивались и что получили в результате.

Читать далее

Автоматизация тестирования, которая не ломается при первом редизайне

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

Автоматизация тестирования, которая не ломается при первом редизайне

Как мы проектировали, внедряли и поддерживаем живую систему автотестов

Читать далее

RabbitMQ и Kotlin: делаем свою event-driven Jira на Spring

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров2.9K

В этой статье мы рассмотрим, как можно в один клик развернуть RabbitMQ в облаке. Также напишем простое приложение на Spring Boot и Kotlin, которое будет взаимодействовать с этим брокером сообщений.

Читать далее

Spring-потрошитель

Время на прочтение28 мин
Количество просмотров16K

Технические доклады могут быстро устаревать и становиться невостребованными. Но со «Spring-потрошителем» Евгения Борисова получилось совсем иначе: мы провели мероприятие и опубликовали запись ещё 11 лет назад, а её просмотры по-прежнему растут, и уже перевалили за за 500 000. Перед собеседованиями этот доклад порой штудируют обе стороны: соискатели — чтобы подтянуть матчасть, работодатели — чтобы задать заковыристые вопросы.

В общем, получился главный доклад русскоязычного Java-сообщества. И теперь мы решили, что ему будет полезна ещё и текстовая версия на Хабре. Да, что-то в материале устарело (там речь заходит ещё про Java 7), так что делайте поправку на возраст. Но раз этот материал продолжают смотреть в видеоформате, то и возможность делать Ctrl+F кому-то наверняка пригодится.

А если кому-то хочется более свежих Java-докладов — мы тем временем вовсю готовим конференцию JPoint 2025 (пройдёт уже 3-4 апреля).

Далее повествование ведется от лица спикера.

Читать далее

Жизненный цикл бина в Spring

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

Если нужно быстро освежить память о жизненном цикле бина в Spring, эта шпаргалка для вас. Здесь коротко и по делу: ключевые этапы — создание, внедрение зависимостей, инициализация, пост-процессинг и уничтожение. Разберем их на понятных примерах, без лишней воды.

Читать далее

Allurium — java framework для автотестов. Мультиязычные, близкие к bdd репорты, без bdd структуры

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

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

Работа в автоматизации тестирования стала моей оффициальной профессией несколько лет назад. За это время мне довелось позаниматься очень широким спектром задач, в зависимости от компаний, где я работал. Начиная с тестирования пользовательских интерфейсов различных сайтов, web и мобильных приложений, обязанности заводили меня глубоко в тестирование сложных API сервисов и даже автоматизацию десктопных программ.

Первые годы я плотно занимался тестированием Web приложений на Java, хотя начинал не с неё. Разумеется, перепробовав много подходов, я нашёл для себя любимый stack, который применял при наличии свободы выбора. Для меня это сложилось в TestNg + Selenium + Allure. Естественно, мне приходилось работать со знаменитым Cucumber, а потом и вообще с чудовищьным (на мой взгляд) Serenity и ещё многими другими решениями, включая кастомные разработки разных людей.

Моё расположение никогда не лежало в сторону BDD, так как чаще всего я сам читал отчёты и проверял тесты, и в 100% случаев сам составлял сценарии с Gherkin (иногда по предоставленным сценариям, чаще нет). Так называемое удобство, дающее BDD пользователю, сводилось к минимуму, а вот взамен требовало многое — небоскрёбы из обёрток классов, сложности с наследованием, необходимость создавать кучу дубликатов мизерных действий, абсолютное неудобство передачи данных между шагами и процессами и прочие трудности.

Читать далее

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

Разработка Java-проекта с Jmix AI Assistant

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

Эта заметка инспирирована статей на Хабре Разработка Java-проекта с ChatGPT-4: от идеи до реализации [1]. После ее прочтения автор начал экспериментировать в разработке ПО с различными AI ассистентами.

Увидев статью блога Jmix AI Assistant — ваш помощник в освоении Jmix, решил реализовать с помощью Jmix AI Assistant приложение аналогичное приведенному в статье [1].

Главное отличие от указанной статьи в том, что вся разработка будет вестись с помощью одного инструмента Jmix AI Assistant без использования сторонних генераторов кода.

Читать далее

Концерт для Java с ИИ — разработка готовых к продакшен LLM приложений (часть 2)

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

Команда Spring АйО перевела и адаптировала доклад Томаса Витале “Concerto for Java and AI — Building Production-Ready LLM Applications”, в котором рассказывается по шагам, как усовершенствовать интерфейс приложения с помощью больших языковых моделей (LLM). В качестве примера автор доклада на глазах слушателей разрабатывает приложение-ассистент для композитора, пишущего музыку для фильмов. 

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

Читать далее

Генерация случайных чисел

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров11K
Картинка Benzoix, Freepik

Зачем вообще нужны случайные числа? Дело в том, что случайные числа не представляют собой оторванную от жизни абстракцию, а широко применяются во множестве областей, начиная от научных исследований и заканчивая технологиями, окружающими нас.

Рассмотрим наиболее известные применения случайных чисел и способы их получения как программным способом, так и комбинированным (программно-физическим).
Читать дальше →

В поисках идеального Database-клиента для IDE: Amplicode выбирает DBeaver

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

Один из частых вопросов, которые мы слышим от наших пользователей, связан с заменой встроенного инструмента для работы с БД, доступного ранее в IntelliJ IDEA Ultimate. В связи с тем, что DataGrip больше не доступен (а именно так называлась эта функциональность), многим разработчикам приходится искать альтернативу инструменту.

Нас эта проблема волнует не только как разработчиков Amplicode, но и как участников проекта OpenIDE. Мы считаем очень важным предоставить российским разработчикам максимально удобное и мощное решение.

Читать далее

На страже производительности Spring Boot приложений: Профилирование и оптимизация

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров4.7K

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

В этой статье мы подробно рассмотрим, как можно оптимизировать производительность Spring Boot приложений, используя базовые методы профилирования и тюнинга. Особое внимание будет уделено таким аспектам, как профилирование процессора и памяти, оптимизация сборки мусора и тюнинг виртуальной машины Java (JVM).

Читать далее

Эффективный подход к тестированию веб-контроллеров в Spring Boot приложениях

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

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

Читать далее

Неблокирующий вызов внешнего сервиса в процессе

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

Довольно часто из процесса приходится обращаться по API к различным внешним сервисам. По сути, это стандартный сценарий оркестрации систем или даже микросервисов (пардон за модное слово). На BPMN диаграмме это выглядит просто и логично – постучались куда-то по API, получили ответ и перешли к следующей задаче. Для моделей аналитического уровня это нормально.

Однако, переходя к исполняемой модели, надо учитывать, что внешний сервис может быть недоступен или просто отвечает очень небыстро. Что происходит с процессом в это время?

Читать далее

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