Обновить
121.82

Java *

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

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

Как и зачем писать свой DatabaseDialect для Kafka JDBC Sink

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

Я активно использую на проекте Kafka Connect Framework и в частности Kafka JDBC Sink Connector для быстрого сохранения данных из Kafka Topic в БД PostgresSQL. Для большинства задач достаточно написать простую JSON-конфигурацию и все стабильно и быстро работает из коробки. Нет необходимости в написании собственного кода. Однако в нетиповых ситуациях расширяемость Kafka Connect тоже помогает - можно переопределить и написать один из компонентов.

В конфигурации JDBC Sink Connector Task существует настройка dialect.name, которая отвечает за выбор диалекта для работы с конкретной БД. Как правило, в 99% случаев используется один из уже реализованных для популярных БД диалектов, как например в моем случае PostgresSqlDatabaseDialect для PostgreSQL.

Может показаться, что вряд ли кому-то понадобится реализовывать свой диалект, если только не имеем дело с какой-то специфичной непопулярной БД. Однако на практике оказалось, что реализация своего диалекта даже для PostgreSQL может быть полезна для решения некоторых возникающих прикладных задач.

В данной статье я хочу показать идеи того, как реализация своего DatabaseDialect может помочь при имплементации нестандартных сценариев для вполне себе популярной БД Postgres, для которой существует PostgresSqlDatabaseDialect.

Читать далее

Новости

Разработка приложения на Spring Boot, Java, База данных, профиль пользователя. Часть 1

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

Всем привет! Когда речь заходит о разработке высоконагруженных систем, многие предлагают: «python, сделать проще и быстрее». Но есть проблема: Скорость разработки != скорость и качество работы сервиса. Когда мы делаем любой продукт, важны: Масштабируемость, стабильность работы под большой нагрузкой, предсказуемость поведения системы — особенно когда речь идет о тысячах одновременных пользователей, лентах новостей в реальном времени, уведомлениях и сложных связях между разными сущностями.

Именно поэтому и выбрана Java и Spring Boot как основа. Банки, сервисы видео, они работают именно на Java и Spring.

Одна из особенностей: строгая типизация, качественные инструменты для многопоточности, мощная экосистема и предсказуемое потребление памяти делают Java идеальным выбором для систем, где падение = полная потеря пользователей.
Попробую сделать цикл статей по разработке соцсети, которая будет объединять в себе ВК, пикабу, и иже с ними. Не ради «создания продукта который затмит всех и вся», а ради самого программирования.

Итак, начну, среда разработки Intellij Idea. О, точно, весь проект будет доступен из gitLab. Нам необходимо создать файлы с конфигурацией. можно сказать что их обычно 3. Да, я про application.yml. один из них общий, который так и называется: application.yml, и еще два: application-dev.yml и application-prod.yml

Читать далее

Миграция Spring Boot 3.x → 4.0: 5 реальных проблем (и как их решить)

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

Планируешь миграцию на Spring Boot 4.0? Вместе с Eddy Benchek в новом переводе от команды Java Insider разбираем пять неочевидных проблем, с которыми столкнулась реальная production-команда при миграции, и показываем, как их исправить, чтобы вы не потеряли дни на поиски неожиданных багов.

Читать далее

Монады на Java

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

Здравствуйте, меня зовут tmaxx, и я алкоголик понял что такое монады. И, естественно, рассказываю об этом всем вокруг, в том числе и вам. Конечно, это Далеко Не Первая Статья О Монадах на Хабре, но ещё один альтернативный взгляд на проблему, думаю, не помешает.

«Монада», как известно, это «моноид в моноидальной категории эндофункторов», что дает примерно ноль информации несведущему человеку. В программировании, можно попробовать определить монаду как «штуку, реализующую вот такие методы»:

(>>=) :: forall a b. m a -> (a -> m b) -> m b
return :: a -> m a

Не понятно на Хаскеле? Вот примерный эквивалент на Java:

<A, B> Monad<B> bind(Monad<A> ma, Function<A, Monad<B>> famb); <A> Monad<A> ret(A a);

Все равно остались вопросы? Почему именно такая сигнатура? Что в ней такого особенного, что она используется абсолютно во всех реальных программах написанных на функциональных языках? Попробуем разобраться.

Читать далее

Везде AI, на чем теперь писать? Статья для Java-бро

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

Как всегда, это история о политике, крови, грызне и скудоумных менеджерах.

Мне всегда казалось, что C# сильно лучше нашей Java (только LINQ expressions чего стоит — именно expressions, а не применения типа LINQ-to-objects). А в F# (тоже работает на .NET) есть нормальные провайдеры типов и другая функциональщина. И всё это работает чудесно, а не как Haskell, который несколько лет подряд сегфолтился на Windows, и никто это не чинил.

Но всё портит маниакальная борьба Microsoft с конкурентами и из-за этого отсутствие экосистемы вне продуктов Microsoft. Это отсутствие конкуренции и деградация. Какой дурак захочет связываться с технологией, из-за которой тебя может назавтра кинуть создатель этой технологии? Беда, C# нам тоже не подходит.

Интересно. Читать далее

Создаем Telegram-бота для отслеживания погоды за 5 минут с помощью Nyagram (а не очередного PizzaBot)

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

В большинстве туториалов по Java-ботам нам предлагают написать EchoBot или магазин пиццы на огромных switch-case конструкциях. Но в 2026 году, когда у нас есть Java 21 и Spring Boot 3, писать бойлерплейт — это преступление против продуктивности.

Сегодня мы напишем WeatherBot — полезного бота, который показывает реальную погоду через API OpenWeatherMap, имеет кнопку обновления "на лету" и, используя FSM (Машину состояний) с валидацией данных, позволяет настроить ежедневную рассылку прогноза.

Читать далее

Kafka для начинающих: обработка ошибок и Dead Letter Queues

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

Как правильно обрабатывать ошибки в Spring Kafka, чтобы консьюмеры не падали? Что такое Dead Letter Queue / Topic?

Простым языком и с примерами кода о паттерне обработки ошибок.

Читать далее

Три модели многопоточности

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

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

Читать далее

Сегодня я для себя открыл: Project Loom

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

"Loom" означает "ткацкий станок" - так назывался проект по добавлению асинхронности в джаву. Тяжёлые системные потоки заменили легковесными виртуальными потоками. Потоки и нити в английском называются одинаково - thread - отсюда название.

Проект успешно внедрили пару лет назад, и я, к сожалению, это полностью пропустил. Основная причина, конечно - что я в принципе не ожидал от джавы никаких прорывов (и оказался на 100% неправ!) Ну и, как бэкенд-разработчик на питоне, я не очень-то слежу за развитием JVM-языков.

Но исправляюсь: Project Loom - это блестящая идея. Учитывая, что его внедрили совместимым образом, и почти не было ломающих изменений. Я считаю, это оптимальная реализация асинхронности для высокоуровневого серверного языка.

Уже почти все использующие JVM языки переехали на новую версию JVM, и, таким образом, на проект Loom: деваться им некуда. Так что, есть надежда, что это изменение откроет новую главу для некоторых из них. Есть также предположение, как оно может повлиять на скриптовые языки, такие как питон. Гипотеза только.

Также, вы узнаете, почему Гвидо ван Россум не ошибся, когда добавлял async/await в питон, а Мацумото — создатель Ruby — тоже угадал, когда, наоборот, отказался от async/await.

Читать далее

Redis — это больше, чем просто кэш

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

Пора перестать воспринимать Redis как временное хранилище key-value. Сегодня это многофункциональный движок, объединяющий в себе брокер сообщений с поддержкой Pub/Sub, гео-БД с Spatial-индексами, и надежный инструмент синхронизации через распределенные блокировки (Redlock). Современный Redis, потенциально, может заменить стек из 3–4 узкоспециализированных сервисов.

В новом переводе от команды Spring АйО рассмотрим, как использовать Redis на полную катушку и превратить его в фундамент вашей архитектуры.

Читать далее

Энди Хант «Говори, а не спрашивай»

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

В своем кратком тексте 1998 года Энди Хант, отталкиваясь от закона Деметры и принципа разделения команд и запросов, просто и понятно излагает один из важных принципов объектно-ориентированного проектирования — «говори, а не спрашивай». Этот принцип учит делегировать объектам ответственность за их данные, что позволяет создавать слабосвязанные и устойчивые к изменениям системы.

Читать далее

Больше чем Proxy: Istio вместо классического Nginx

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

Что делать, когда инфраструктура, сдерживавшая злоумышленников, внезапно начинает мешать легитимным клиентам? В Dodo Payments такой момент наступил в 23:00 в четверг — и стал точкой невозврата.

В новом переводе от команды Spring АйО подробно разберем переход с классического ingress-контроллера на полноценный service mesh. Миграция заняла 11 недель и навсегда изменила подход к платформенной инженерии.

Читать далее

Как я подружил Триколор с Алисой: итоги

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

Привет, это снова Егор. Сегодня я подведу итоги моей попытки интегрировать ресивер с умным домом Яндекса.

Читать далее

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

Паттерны проектирования в Data Engineering, которые необходимо освоить в 2026 году

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

Настоящая устойчивость систем — в архитектуре. В новом переводе от команды Spring АйО — 8 фундаментальных паттернов проектирования, на которых держатся все современные data engineering-стеки. Освоив их, вы перестанете тушить пожары и начнёте проектировать платформы, которые выдерживают продакшен.

Читать далее

3 ошибки при работе со Spring Boot, которые просачиваются в прод (и как их исправить)

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

Пишешь на Spring Boot уже пару лет и уверен, что знаешь все подводные камни? Рассмотрим классические ошибки, которые продолжают проникать в прод даже у бывалых разработчиков. Вместе с Mohamed Akthar в новом переводе от команды Java Insider разбираем три распространённые проблемы, которые могут привести к бессонным ночам отладки.

Читать далее

Veai 5.3: новые режимы агента, личный кабинет и выбор модели LLM

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

В Veai 5.3 добавлены режимы работы агента (Modes), появился личный кабинет и возможность выбрать модель LLM для индивидуальных пользователей, отображение ИИ-текста стало более плавным и комфортным для восприятия.

Читать далее

Интеграция coding-агента с MCP-сервером Idea

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

В IntelliJ Idea (а, значит, и в OpenIDE) есть встроенный MCP-сервер. Активируется он достаточно просто и позволяет расширять стандартную функциональность command-line кодинговых агентов, таких как платный Claude Code или бесплатный, но тоже весьма неплохой Qwen Code. Преимущество CLI-агентов в том, что они работают с исходниками напрямую, держат контекст всего проекта и сами проверяют компилируемость кода. А MCP-сервер предоставляет такому агенту некоторую функциональность, которая обеспечивается средствами IDE. Поскольку IDE явно лучше заточена под работу с исходниками проекта, чем универсальные агенты, такие действия выполняются быстрее и точнее.

Читать далее

Go рухнул с 7 на 16 место в TIOBE: пора ли российским компаниям пересмотреть технологический стек?

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

В ноябре 2024 года язык программирования Go достиг своего исторического максимума — седьмого места в престижном индексе TIOBE, укрепив позиции в топ-10. Однако всего через 14 месяцев, в январе 2026 года, картина кардинально изменилась: Go обвалился на 16-е место, потеряв сразу 9 позиций. Это один из самых драматичных спадов года среди топовых языков. Парадокс в том, что в России Go переживает противоположную тенденцию — язык активно набирает популярность, его используют крупнейшие технологические компании и количество Go-разработчиков превысило 40 тысяч. Возникает критический вопрос для отечественной индустрии: не движемся ли мы против глобального технологического тренда, делая ставку на язык, который теряет позиции на мировой арене?

Читать далее

«Области тьмы» ИТ: платформы управления данными

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

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

Читать далее

Как компьютер понимает Языки программирования: история о том, как ваш код превращается в нули и единицы

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

Привет, Хабр! (И тебе, случайный читатель, который думает, что "код - это магия", а процессор - маленький гномик, который внутри ноутбука читает for i in range(10) и послушно бегает кругами.)

Сегодня разберёмся с вопросом, который в какой-то момент приходит в голову каждому разработчику, а потом быстро вытесняется дедлайном:

Как вообще компьютер “читает” Python или 1С или любой другой язык программирования, если он понимает только 0 и 1? И почему ваш идеальный код иногда превращается в "segmentation fault" / "Неопределённая ошибка" / “Пользователь не найден (хотя он сидит напротив)”?

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

Поехали. Будет без хардкора уровня “компилятор за 21 день”, но с понятными аналогиями, для статьи упростил всё до минимума. Реально постарался переварить информацию и выдать её в красивой упаковке. Кстати, в статье будут примеры из двух разных миров Python и 1С, так что будет интересно…

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

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