Java Portal | Программирование
12.2K subscribers
1.36K photos
108 videos
42 files
1.37K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Spring Boot: используйте @Async только для небольших задач на оффлоадинг и только с явно заданным исполнителем.
#SpringBoot #SoftwareDevelopment

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Микросервисы — плохой выбор по умолчанию для 94% команд.

Зачем разбивать приложение на набор сервисов, которым нужно общаться через сеть.

На бумаге это выглядит как «правильный» подход. Масштабирование звучит привлекательно.

Но на практике я видел, как это ломается, шесть раз.

Команды из 5 инженеров поднимали 11 сервисов с несколькими очередями сообщений. Всё становилось медленнее.

Деплой, который занимал минуты, растягивался до 35 минут из-за зависимостей.

Отладка превращалась в кошмар: один баг — и приходится трейсить запрос через несколько сервисов и кодовых баз.

Сложность не уменьшилась. Она просто распределилась.

Микросервисы — это решение под масштабирование, но большинство команд внедряют их слишком рано, когда проблемы масштаба ещё нет.

Если ты всё ещё работаешь на localhost, основная проблема — не масштаб. Это стабильный релиз.

Когда микросервисы имеют смысл:

- команды блокируют работу друг друга
- части системы требуют независимого масштабирования
- есть нормальная трассировка в проде, и можно отлаживать без угадывания

Если этого нет — платишь налог распределённых систем без реальной выгоды.

Начинай с монолита и держи модульность. Делить стоит только тогда, когда связность начинает тормозить разработку.

Большинство обсуждений «нам нужны микросервисы» на деле не про архитектуру.

Они про грязную кодовую базу или болезненные деплои.

Сначала решаются эти проблемы.

Простые системы легче понимать. Перегруженные обычно разваливаются под собственным весом.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Spring Boot: с org.hibernate.SQL=DEBUG можно получить более детальный вывод Hibernate-запросов прямо в логах.

#SpringBoot #Hibernate

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
image_2026-05-10_08-18-07.png
50.9 KB
Завершаемые фьючеры для чистого асинхронного программирования

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

Реальный сценарий: параллельные HTTP-вызовы к нескольким API с последующим объединением результатов, цепочкой преобразований и централизованной обработкой ошибок.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Концепции Spring Security: OAuth2 Resource Server

С одной декларацией OAuth2ResourceServer Spring Security будет:

1- Извлекать заголовок Authorization: Bearer <token> из каждого запроса
2- Валидировать подпись токена через публичный ключ Authorization Server’а (полученный через JWKS URI)
3 Проверять claims: срок действия (exp), issuer и audience
4- Заполнять SecurityContext аутентифицированным principal’ом

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🌚2
Spring Boot: используй @EntityGraph для управления стратегиями загрузки и предотвращения N+1 запросов.
#SpringBoot #SoftwareEngineering

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆1
@Sql или @SqlGroup позволяют заранее загружать тестовые данные для выполнения воспроизводимых тестов.

Позволяет:

Вставлять тестовые данные
Очищать таблицы
Сбрасывать состояние базы данных

#SpringBoot #IntegrationTesting

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
@ConditionalOnClass — это аннотация Spring Boot, которая используется в auto-configuration.

Она условно активирует bean или configuration только в том случае, если указанный класс присутствует в classpath.
#SpringBoot #Microservices

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Новое в Java 25: гибкие тела конструкторов (Flexible Constructor Bodies, JEP 513)!

Теперь можно выполнять валидацию аргументов или подготовительную инициализацию до явного вызова другого конструктора (this(...) или super(...)) — больше не нужны шаблонные вспомогательные методы (helper methods) ради такой логики.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В новых приложениях на Spring Boot у тебя есть выбор использовать WebClient вместо RestTemplate.

Он реактивный и неблокирующий
Работает на основе event loop, а не модели «один поток на один запрос» (thread-per-request)

#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Этот класс задуман как неизменяемый (immutable), но в нём есть неочевидный баг. Сможешь его найти?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔14👍6
Инструмент визуализации кода, который поможет разобраться в кодовой базе.

Поможет быстрее понять сложные проекты, разложив всё в понятной инфографике

Ознакомиться: Тык

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
У Java Streams не было необходимости в отдельном методе под каждый возможный use case.
Им была нужна точка расширения.

Stream Gatherers дают тебе встроенные gatherer’ы для типичных stateful-операций, а также возможность определять собственные intermediate-операции, оставаясь внутри Stream pipeline.

Ниже простой пример батчинга фиксированного размера через windowFixed 👇

Требуется Java 24+.
2
Spring Boot легко интегрируется с Apache Kafka для реализации event-driven архитектур.

Сначала добавляешь необходимую зависимость в pom, затем можешь настроить её в application.xml, указав, как подключаться к кластеру Apache Kafka, а также как определены consumer’ы и producer’ы.

Here the required dependency:

<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
Configuration example:

spring:
kafka:
bootstrap-servers: localhost:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
acks: all
retries: 3
consumer:
group-id: my-service-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer


После этого можно реализовать consumer’ы и producer’ы как Java-объекты:

Producer:

@Service
public class MessageProducer {

private final KafkaTemplate<String, String> kafkaTemplate;

public MessageProducer(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}

public void send(String message) {
kafkaTemplate.send("demo-topic", message);
}
}
Consumer:

@Service
public class MessageConsumer {

@KafkaListener(topics = "demo-topic", groupId = "demo-group")
public void listen(String message) {
System.out.println("Received: " + message);
}
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Spring Boot: с @RestControllerAdvice можно глобально обрабатывать конкретные типы исключений вместо того, чтобы разбрасывать try/catch по всему коду.

#SpringBoot #SoftwareEngineering

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Понимание кода — одна из больших задач в эпоху ИИ, и именно поэтому один из разрабов JetBrains IDE создал Walkthrough.

Этот экспериментальный плагин предоставляет ИИ-агентам MCP-инструмент, который позволяет пошагово проводить вас по коду прямо в JetBrains IDE в визуальном формате, вместо того чтобы заваливать вас простынями текста.

Заценить можно здесь: https://plugins.jetbrains.com/plugin/31637-walkthrough 😶

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Иерархия потоков ввода-вывода в Java

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Boot: spring.main.lazy-initialization=true не только откладывает создание бинов, но и полностью пропускает выполнение @PostConstruct до первого реального использования бина. Учитывайте это и следите за побочными эффектами.

#SpringBoot #SoftwareDevelopment

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Java 8: мастерство работы с «разворачивающим отображением» — самая важная операция потоков, с которой у разработчиков чаще всего возникают сложности

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Это тот сайт, который Google должен ставить на первое место по каждому поиску разработчиков.
Он называется IT Tools: https://it-tools.tech/

Бесплатный open-source сайт с 100+ утилитами для разработчиков, которые полностью работают локально в браузере.

JSON formatter
Regex tester
JWT decoder
UUID generator
Cron parser
Timestamp converter
Hash generators
Docker helpers
Color tools
Markdown editor

Всё загружается мгновенно. Нет логинов. Нет трекинга. Нет AI-сгенерированного SEO-мусора.

Когда ищешь один простой конвертер на других сайтах, получаешь:

- всплывающий спам
- трекеры
- фейковые кнопки
- автозапуск видео
- 40 скриптов аналитики

А поскольку сайт полностью open-source, вы можете сами его хостить.
Одна закладка заменила для меня 30+ случайных сайтов.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Как выбрать шаблон проектирования?

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

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

Чтобы выбрать шаблон, сначала необходимо определить тип проблемы:

> Создание объектов? → Порождающие шаблоны
> Компоновка объектов? → Структурные шаблоны
> Взаимодействие объектов? → Поведенческие шаблоны

Приступим.

1. Порождающие шаблоны

> Singleton — используется, когда нужен единственный экземпляр класса. Примеры: логгирование, подключения к базе данных.
> Factory Method — отделяет создание объекта от его использования. Пример: создание разных типов подключений к БД на основе конфигурации.
> Abstract Factory — создаёт семейства связанных объектов. Пример: парсеры для разных форматов файлов.
> Builder — пошаговое создание сложных объектов. Пример: построение сложного объекта доменной модели.
> Prototype — создание копий объектов и повторное использование закэшированных экземпляров для снижения количества запросов к БД.

2. Структурные шаблоны


> Adapter — делает несовместимые интерфейсы совместимыми. Пример: подключение новой библиотеки логгирования к системе с другим интерфейсом.
> Composite — представление иерархий "часть-целое". Пример: графические объекты в редакторе, объединяемые в группы.
> Proxy — управление доступом к объекту. Пример: ленивое подключение изображения высокого разрешения.
> Decorator — динамическое добавление/удаление поведения. Пример: добавление сжатия или шифрования для потоков файлов.
> Bridge — разделение абстракции и реализации. Пример: изоляция платформозависимого кода от основной логики.

3. Поведенческие
шаблоны

> Strategy — определяет семейство алгоритмов. Пример: выбор между различными алгоритмами сортировки или сжатия.
> Observer — оповещение об изменениях состояния. Пример: уведомление подписчиков о событиях в системе сообщений.
> Command — инкапсулирует запрос как объект. Пример: реализация undo/redo в текстовом или графическом редакторе.
> State — инкапсулирует поведение в зависимости от состояния. Пример: разные состояния UI-элемента (вкл., выкл., выделен).
> Template Method — задаёт скелет алгоритма, позволяя подклассам реализовать отдельные шаги. Пример: базовый класс для юнит-тестов с переопределяемыми шагами подготовки и очистки.

В итоге мы подбираем тот шаблон, который наилучшим образом решает конкретную задачу

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54