🌐 dnsjava — DNS-клиент и сервер на Java. Эта библиотека предлагает полную реализацию DNS-протокола с поддержкой современных стандартов — от DNSSEC и EDNS0 до TSIG-аутентификации. Проект позволяет не только выполнять запросы, но и организовывать трансфер зон, динамические обновления и даже разворачивать авторитативный сервер.
Инструмент имеет встроенный механизм валидации DNSSEC через
🖥 GitHub
✅ Java библиотека #java
Инструмент имеет встроенный механизм валидации DNSSEC через
ValidatingResolver и гибкая система конфигурации через системные свойства. Поддерживает Java 8+ и может заменять стандартный DNS-резолвер JVM. Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥2
Работаете с микросервисной архитектурой? Тогда знаете, как сложно обеспечить стабильные API-контракты между сервисами. Contract Testing решает эту проблему. А AI поможет быстро сгенерировать заготовку всей инфраструктуры для автоматизированной валидации контрактов.
📝 Промпт:
Generate a Java Spring Boot setup for contract testing using Spring Cloud Contract and Testcontainers.
— Configure a provider service and a consumer service.
— Use Spring Cloud Contract to define and verify contracts.
— Integrate with Testcontainers to run provider stubs in isolated environments.
— Add Gradle or Maven setup for running contract tests in CI.
— Provide examples for both producer and consumer side tests.
— Добавьте
integration with GitLab CI/CD or GitHub Actions для автоматической валидации контрактов при push'ах и pull request'ах.— Добавьте
generate stub JARs using Spring Cloud Contract Verifier для повторного использования контрактов на стороне потребителя.— Добавьте
handle contract mismatches gracefully with test reports and logs для быстрого выявления расхождений между сервисами и прозрачной отладки в CI.— Добавьте
include real-world example: REST endpoint for user profile with request validation and response structure как шаблон, который можно адаптировать под любую бизнес-логику.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2
🚀 Хочешь быстро разобраться, как использовать GraphQL с Spring Boot?
📦 Репозиторий содержит набор готовых микросервисов на Spring Boot, каждый из которых показывает разные аспекты интеграции с GraphQL: от простых запросов до работы с subscriptions и federated схемами.
Что внутри:
- 📌 Примеры с использованием Spring Boot 3 и GraphQL Java
- 🔗 Демонстрация схемы Federation с Apollo Gateway
- ☁️ Микросервисная архитектура + Docker Compose
- ⚙️ Использование Spring Data и JPA с GraphQL
- 🔄 Примеры запросов и мутаций через GraphiQL
Полезно как для новичков в GraphQL, так и для разработчиков, строящих продвинутые API на Spring Boot. Всё собрано и работает из коробки.
🖥 Репозиторий
📦 Репозиторий содержит набор готовых микросервисов на Spring Boot, каждый из которых показывает разные аспекты интеграции с GraphQL: от простых запросов до работы с subscriptions и federated схемами.
Что внутри:
- 📌 Примеры с использованием Spring Boot 3 и GraphQL Java
- 🔗 Демонстрация схемы Federation с Apollo Gateway
- ☁️ Микросервисная архитектура + Docker Compose
- ⚙️ Использование Spring Data и JPA с GraphQL
- 🔄 Примеры запросов и мутаций через GraphiQL
Полезно как для новичков в GraphQL, так и для разработчиков, строящих продвинутые API на Spring Boot. Всё собрано и работает из коробки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
Если вы часто просматриваете стек вызовов или трассируете поведение методов — попробуйте «Call Hierarchy» (Ctrl + Alt + H). Этот инструмент показывает, кто вызывает ваш метод — и кто вызывает вызывающего, до самого верхнего уровня.
— Строит иерархию вызовов метода вверх или вниз.
— Помогает отследить влияние метода по всей кодовой базе.
— Работает даже с интерфейсами и абстрактными методами — покажет всех наследников.
— Находит неочевидные связи между частями кода.
— Упрощает работу с легаси: видно, какие методы безопасно менять.
— Быстро определяет, как ошибка «долетела» до нужного места.
— Поставьте курсор на метод → нажмите Ctrl + Alt + H.
— IDEA откроет дерево вызовов (Call Hierarchy).
— Вы можете «разворачивать» цепочку вверх по стеку или вниз.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍20🔥3❤2
Проект сочетает desktop-приложение для визуальной работы и Kotlin Multiplatform библиотеку для программного взаимодействия с class-файлами. Поддерживает работу с JAR-архивами, предлагает темную тему и локализации на несколько языков.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3👍2
Forwarded from Java Guru 🤓
Что будет результатом инжекта бина А?
Anonymous Quiz
18%
Выведутся сообщения: Ainitialized B initialized
7%
Приложение запустится, но "а" в В останется null.
46%
BeanCurrentlyInCreationException
5%
Будет создан только бин А
23%
Ошибка компиляции
👍7❤6🔥2
Автоматизация сборки, тестирования и деплоя — must-have даже для pet-проекта. Но настраивать GitLab CI или GitHub Actions вручную? Спросите AI — и получите готовый пайплайн, адаптированный под ваш стек.
📝 Промпт:
Generate a CI/CD pipeline for a Java Spring Boot application using GitLab CI.
— Include stages: build, test, integration-test, package, deploy.
— Use Gradle (or Maven) as the build tool.
— Include support for Docker image build and push to container registry.
— Run integration tests using Testcontainers.
— Use caching to speed up pipeline runs.
— Добавьте
environment-specific deployments: отдельные джобы для dev/stage/prod с переменными окружения, secrets и условиями по веткам (only/except или rules).— Интегрируйте
notifications в Telegram или Slack на стадии failed/success для быстрой обратной связи.— Добавьте
security scan stage: используйте Snyk или OWASP Dependency Check для анализа уязвимостей зависимостей.— Автоматизируйте
Docker image tagging: используйте Git tag или commit hash, чтобы образы были отслеживаемыми.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥4
Основанный на принципе dependency injection, фреймворк особенно удобен для микросервисов. Достаточно добавить нужные модули через Maven и написать класс с main()-методом — приложение готово к работе без сложных настроек.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Правильное понимание Single Responsibility Principle (SRP)
О принципе единственной ответственности слышали все. Конечно правильный ответ согласно книги Роберта Мартина "Чистая архитектура": SRP - это принцип единой ответственности.
Но при попытке разобраться в более дательном понимании принципа его часто трактуют слишком буквально:
Да, это отчасти верно и такой принцип тоже есть, но он применяется на низшем уровне системы. SRP же применяется на более высоком уровне.
В итоге получаются сервисы, в которых вроде как всё «по SRP», но изменения в одном бизнес-сценарии ведут к каскадным правкам в десятках файлов. Это сигнал: принцип нарушен, несмотря на формальное соблюдение.
🟢 О чём на самом деле говорит SRP
В классическом изложении (по Роберту Мартину):
И под модулем понимается не метод и не даже один класс, а группа классов и интерфейсов, объединённая общим потребителем — актором.
🟢 Что это означает на практике
1. Определите акторов
Актор — это не всегда пользователь. Это может быть внешний сервис, внутренний инструмент, регламент. Важно: требования акторов не должны пересекаться. Если они меняются независимо — значит, им нужны отдельные модули.
2. Постройте модули вокруг акторов
Частая ошибка — «модуль пользователей», в котором и логика регистрации, и рассылка писем, и обработка GDPR-запросов.
Лучше разделить:
🔘 один модуль обслуживает end-user’а,
🔘 другой — юридические требования,
🔘 третий — внутреннюю админку.
3. Не дробите код ради SRP, если это нарушает целостность модуля
SRP — это не о размере, а о мотивации изменений. Метод в 100 строк, обслуживающий один сценарий, допустим. А вот класс, который реагирует на десяток независимых событий — нет.
🟢 Пример
❌ Плохо:
Этот класс изменится при любом изменении в бизнес-логике, в уведомлениях или в логировании. Три причины изменения — три актора.
✔️ Хорошо:
🔘 OrderProcessor — отвечает за бизнес-сценарий
🔘 NotificationService — отправка сообщений
🔘 AuditService — логирование
Каждый компонент обслуживает одного актора, имеет свою причину для изменений и независимую эволюцию.
🟢 Вывод
SRP стоит понимать как инструмент для проектирования архитектуры. Его задача — отделить контексты, которые меняются по разным причинам, и тем самым минимизировать связность и ограничить зону изменений. Не методы, не классы, а контексты и акторы.
✅ Java библиотека #java
О принципе единственной ответственности слышали все. Конечно правильный ответ согласно книги Роберта Мартина "Чистая архитектура": SRP - это принцип единой ответственности.
Но при попытке разобраться в более дательном понимании принципа его часто трактуют слишком буквально:
Метод должен реализовывать одну задачу
Класс должен отвечать за один функционал
Да, это отчасти верно и такой принцип тоже есть, но он применяется на низшем уровне системы. SRP же применяется на более высоком уровне.
В итоге получаются сервисы, в которых вроде как всё «по SRP», но изменения в одном бизнес-сценарии ведут к каскадным правкам в десятках файлов. Это сигнал: принцип нарушен, несмотря на формальное соблюдение.
В классическом изложении (по Роберту Мартину):
Модуль должен иметь только одну причину для изменения.
И под модулем понимается не метод и не даже один класс, а группа классов и интерфейсов, объединённая общим потребителем — актором.
1. Определите акторов
Актор — это не всегда пользователь. Это может быть внешний сервис, внутренний инструмент, регламент. Важно: требования акторов не должны пересекаться. Если они меняются независимо — значит, им нужны отдельные модули.
2. Постройте модули вокруг акторов
Частая ошибка — «модуль пользователей», в котором и логика регистрации, и рассылка писем, и обработка GDPR-запросов.
Лучше разделить:
3. Не дробите код ради SRP, если это нарушает целостность модуля
SRP — это не о размере, а о мотивации изменений. Метод в 100 строк, обслуживающий один сценарий, допустим. А вот класс, который реагирует на десяток независимых событий — нет.
public class OrderService {
public void placeOrder() { ... }
public void notifyCustomer() { ... }
public void saveAuditLog() { ... }
}Этот класс изменится при любом изменении в бизнес-логике, в уведомлениях или в логировании. Три причины изменения — три актора.
Каждый компонент обслуживает одного актора, имеет свою причину для изменений и независимую эволюцию.
SRP стоит понимать как инструмент для проектирования архитектуры. Его задача — отделить контексты, которые меняются по разным причинам, и тем самым минимизировать связность и ограничить зону изменений. Не методы, не классы, а контексты и акторы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍8❤6
👨💻 Sentry для Java/Android — мониторинг ошибок в реальном времени. Этот инструмент помогает разработчикам быстро находить и исправлять ошибки в Java и Android-приложениях.
Инструмент отслеживает не только краши, но и проблемы производительности, интегрируясь с популярными библиотеками вроде Spring Boot и OkHttp. Он будет особенно полезен для команд, которые хотят улучшить стабильность мобильных и серверных приложений без лишнего ручного тестирования. Поддерживает нативный код через NDK.
🖥 GitHub
✅ Java библиотека #java
Инструмент отслеживает не только краши, но и проблемы производительности, интегрируясь с популярными библиотеками вроде Spring Boot и OkHttp. Он будет особенно полезен для команд, которые хотят улучшить стабильность мобильных и серверных приложений без лишнего ручного тестирования. Поддерживает нативный код через NDK.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥2
Как создать идеальную внутреннюю платформу для разработчиков:
опыт MWS Cloud Platform⬜️
В новой статье на Хабре инженер MWS рассказал, как построить эффективную команду Development Platform.
Автор поделился ключевыми принципами, которые помогут:
➡️ Наладить взаимодействие между инфраструктурными и продуктовыми командами
➡️ Минимизировать техдолг
➡️ Создать культуру общего кода
⏩️ Читать статью
опыт MWS Cloud Platform
В новой статье на Хабре инженер MWS рассказал, как построить эффективную команду Development Platform.
Автор поделился ключевыми принципами, которые помогут:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥2
Виртуальные потоки — будущее или сырой эксперимент?
С выходом Java 21 виртуальные потоки (Virtual Threads) стали доступными для продакшна. Обещают удобный и масштабируемый способ работы с параллелизмом и без боли реактивщины.
🟢 Сторонники Virtual Threads уверены: это долгожданный прорыв. Теперь можно писать привычный синхронный код, не заморачиваясь с CompletableFuture и реактивными фреймворками. Масштабируемость? Да! Сотни тысяч потоков без overhead-а — вполне реально.
🟢 Напротив: tooling и экосистема пока не готовы. IDE лагают при отладке, JMX и трейсы работают криво, баги не редкость. Да и блокировки никуда не делись — просто теперь они маскируются, а не устраняются. По сути — "асинхронность для ленивых".
❓ Стоит ли сразу использовать их в новых проектах или подождать пару релизов?
✅ Java библиотека #java
С выходом Java 21 виртуальные потоки (Virtual Threads) стали доступными для продакшна. Обещают удобный и масштабируемый способ работы с параллелизмом и без боли реактивщины.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥4🍾2
Когда нужно что-то быстро протестировать, написать фрагмент кода, проверить регулярку или сериализацию — не создавайте новый класс. Вместо этого используйте Scratch File (Ctrl + Alt + Shift + Insert).
— Создаёт временный файл вне проекта
— Поддерживает Java (и другие языки), автодополнение, импорт, выполнение
— Сохраняется автоматически, можно переключаться между файлами
— Быстрые пробы кода без засорения проекта
— Подходит для написания утилит, генерации данных, логов
— Удобно держать список SQL-запросов, curl-ов или шаблонов прямо в IDE
— Нажмите Ctrl + Alt + Shift + Insert → выберите язык (например, Java)
— Пишите как обычно: public static void main, System.out.println() — и запускайте
— Можно открыть менеджер Scratch-файлов через Project > Scratches and Consoles
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤8👍7
Задача:
❓ Что выведет программа?
🧠 Подвох:
Многие ожидают:
Но на самом деле Java напечатает:
🧠 Объяснение:
В Java значения Integer от -128 до 127 кэшируются (Integer Cache). То есть Integer.valueOf(127) возвращает один и тот же объект.
a == b → true потому что 127 в диапазоне кэширования.
c == d → false потому что 128 не кэшируется, создаются разные объекты.
.equals() сравнивает значения, поэтому c.equals(d) → true.
✅ Урок:
Никогда не сравнивай Integer, Long, Boolean и другие объекты-обёртки через ==. Используй .equals().
✅ Java библиотека #java
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b); // ?
System.out.println(c == d); // ?
System.out.println(c.equals(d)); // ?
}
}
🧠 Подвох:
Многие ожидают:
true
true
true
Но на самом деле Java напечатает:
true
false
true
🧠 Объяснение:
В Java значения Integer от -128 до 127 кэшируются (Integer Cache). То есть Integer.valueOf(127) возвращает один и тот же объект.
a == b → true потому что 127 в диапазоне кэширования.
c == d → false потому что 128 не кэшируется, создаются разные объекты.
.equals() сравнивает значения, поэтому c.equals(d) → true.
✅ Урок:
Никогда не сравнивай Integer, Long, Boolean и другие объекты-обёртки через ==. Используй .equals().
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤9🔥6
Lombok давно стал популярным решением. Аннотации вроде @Getter, @Builder, @Slf4j избавляют от рутинного кода и ускоряют разработку.
— Устраняет шаблонный код и снижает количество ручных ошибок.
— Удобен при работе с immutable‑объектами и внедрении зависимостей через конструкторы.
— Зависимость от нестабильных internal‑API.
— Требует обязательной поддержки на всех IDE/CI.
— За «синтаксический сахар» приходится платить техническим долгом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3
🔐 pac4j — универсальный фреймворк для аутентификации и авторизации в Java-приложениях. Этот инструмент упрощает интеграцию десятков механизмов проверки подлинности в веб-сервисы и MVC-фреймворки (Spring, Play, Vert.x и другие).
Проект обладает модульностью: можно собрать систему безопасности как конструктор, комбинируя компоненты для работы с ролями, CSRF-защитой или CORS. Поддерживается даже экзотика вроде Kerberos или проверки по IP-адресу. При этом код остаётся читаемым благодаря Lombok в новых версиях.
🖥 GitHub
✅ Java библиотека #java
Проект обладает модульностью: можно собрать систему безопасности как конструктор, комбинируя компоненты для работы с ролями, CSRF-защитой или CORS. Поддерживается даже экзотика вроде Kerberos или проверки по IP-адресу. При этом код остаётся читаемым благодаря Lombok в новых версиях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4❤3
Генерация Event-Driven архитектуры на Spring + Kafka
Классический REST не справляется с масштабом и скоростью реакции? Пора перейти к событийной архитектуре: Kafka + Spring Boot. Спросите AI — и получите продуманный шаблон микросервиса с продюсерами, консьюмерами, сериализацией, хэндлингом ошибок и даже dead-letter-топиками.
📝 Промпт:
💡 Расширения:
— Добавьте
— Добавьте
— Добавьте
— Добавьте
✅ Java библиотека #java
Классический REST не справляется с масштабом и скоростью реакции? Пора перейти к событийной архитектуре: Kafka + Spring Boot. Спросите AI — и получите продуманный шаблон микросервиса с продюсерами, консьюмерами, сериализацией, хэндлингом ошибок и даже dead-letter-топиками.
📝 Промпт:
Generate a production-grade Java Spring Boot microservice using Apache Kafka for event-driven architecture.
— Use Spring Boot 3 and Spring Kafka.
— Implement Kafka producers and consumers for a user.created event.
— Use Avro schema for message serialization and Schema Registry for compatibility.
— Include retry logic and Dead Letter Topic (DLT) support for failed messages.
— Handle message headers and custom error handling.
— Add integration tests using Embedded Kafka and Testcontainers.
— Добавьте
Implement the outbox pattern using a transactional Kafka producer and Debezium CDC, чтобы гарантировать доставку событий и избежать дублирования при сбоях в БД.— Добавьте
Integrate observability using Micrometer for Prometheus and OpenTelemetry for distributed tracing, чтобы отслеживать метрики и трассировать поток сообщений сквозь микросервисы.— Добавьте
Generate Kafka topic and consumer group configuration using Terraform, чтобы автоматизировать инфраструктуру и обеспечить консистентную настройку топиков в Dev/Stage/Prod.— Добавьте
Support dynamic partitioning and load balancing among consumers, чтобы масштабировать консьюмеров при увеличении нагрузки.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🔥5
Проект вдохновлён LangChain, но адаптирован под Spring-экосистему: здесь есть автоматическая конфигурация через Spring Boot, поддержка векторных баз данных и инструменты для оценки качества ответов моделей. Разработчики делают акцент на переносимость кода между разными ИИ-сервисами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥6👍3
Забудьте про System.out.println() в логике — используйте Evaluate Expression прямо во время отладки, чтобы проверить любые значения на лету.
— Позволяет выполнять произвольные выражения прямо во время паузы
— Работает с контекстом текущего стека: переменные, поля, this
— Поддерживает сложные конструкции: myList.stream().filter(...).collect(...)
— Позволяет быстро проверять гипотезы при отладке
— Избавляет от лишних логов или временных переменных
— Помогает исследовать поведение без изменения кода
— Поставьте breakpoint и запустите Debug
— Когда выполнение остановится, нажмите Alt + F8
— Введите выражение и нажмите Evaluate
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍12🔥5
🐘 Hibernate ORM — зрелый ORM-фреймворк для Java, который остается стандартом де-факто для работы с реляционными БД. Хотя проект реализует JPA-спецификацию, он предлагает гораздо больше возможностей — от расширенного кэширования до поддержки экзотических СУБД вроде SAP HANA.
Разработчики уделяют внимание тестированию: в комплекте идут Docker-скрипты для быстрого развертывания 15+ СУБД и гибкая система профилей. Сборка требует JDK 21, но сохраняет совместимость с Java 17.
🖥 GitHub
✅ Java библиотека #java
Разработчики уделяют внимание тестированию: в комплекте идут Docker-скрипты для быстрого развертывания 15+ СУБД и гибкая система профилей. Сборка требует JDK 21, но сохраняет совместимость с Java 17.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥2