Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg
Больше📈 Аналитический обзор Telegram-канала Java Portal | Программирование
Канал Java Portal | Программирование (@java_iibrary) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 12 121 подписчиков, занимая 10 397 место в категории Технологии и приложения и 54 492 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 12 121 подписчиков.
Согласно последним данным от 08 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -138, а за последние 24 часа — -5, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 11.21%. В первые 24 часа после публикации контент обычно набирает 6.34% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 1 360 просмотров. В течение первых суток публикация набирает 769 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 4.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как boot, string, void, архитектура, resttemplate.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg”
Благодаря высокой частоте обновлений (последние данные получены 09 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
@Transactional не работает, когда ты вызываешь метод из другого метода в том же классе?
Это не баг, а классическая особенность Spring AOP по дизайну.
Знаешь, почему транзакция вообще не стартует?
Проблема в том, как Spring AOP создаёт прокси. Когда ты ставишь @Transactional на метод, Spring не правит байткод класса. Вместо этого он создаёт прокси-объект, который оборачивает твой бин.
Этот прокси перехватывает внешние вызовы метода, запускает транзакцию и потом делегирует вызов реальному методу бина.
Это отлично работает, когда внешний бин вызывает твой публичный транзакционный метод, потому что вызов проходит через прокси.
Но при самовызове внутри класса (например, this.someTransactionalMethod()) ты вызываешь метод напрямую на целевом объекте (this), а не через прокси. Транзакционный advice прокси полностью обходится, поэтому транзакция не стартует. Это фундаментальное следствие прокси-based AOP.
Чтобы исправить, самое чистое и продакшен-готовое решение это вынести транзакционный метод в отдельный Spring-бин и инжектить его. Тогда вызов всегда будет внешним и пройдёт через прокси, корректно поднимая транзакцию каждый раз. 🙈
👉 Java PortalДо 8 сентября действует скидка 25% -- тык
Future и CompletableFuture в Java?
Обычно на это отвечают размыто. Давай разложим по полочкам.
Что такое Future
• Появился в Java 5 вместе с Executor framework.
• Представляет результат асинхронного вычисления.
• Обычно ты отдаешь Callable в ExecutorService, который возвращает Future<T>.
С ним можно:
• вызвать get() → блокирует поток, пока задача не завершится
• вызвать isDone() → проверить, закончилась ли задача
• вызвать cancel() → попытаться отменить выполнение
И на этом все. Future дает контроль над ожиданием, но никак не управляет тем, что делать, когда результат готов.
Что добавляет CompletableFuture
• Появился в Java 8, реализует Future и CompletionStage.
• Все еще является Future (можно блокироваться, если хочется), но гораздо функциональнее.
• Поддерживает неблокирующие коллбеки (thenApply, thenAccept, thenRun).
• Позволяет комбинировать задачи (thenCombine, allOf, anyOf).
• Умеет завершаться вручную через complete(), чего у Future нет.
• Даёт более гибкую обработку ошибок (exceptionally, handle).
Главная разница
С Future ты просто ждешь результат. С CompletableFuture ты описываешь, что должно произойти, когда результат появится.
👉 Java Portalclass UserDTO {
private String name;
private String email;
}
2. ModelMapper
ModelMapper это библиотека для автоматического маппинга DTO <-> Entity.
Без него пришлось бы вручную писать:
dto.setName(entity.getName());
dto.setEmail(entity.getEmail());
С ModelMapper это превращается в:
UserDTO dto = modelMapper.map(userEntity, UserDTO.class);
Плюсы: меньше шаблонного кода.
Минусы: для сложных кейсов нужна настройка, а ещё можно легко пропустить баг в маппинге, если полагаться только на автоматику.
3. Jackson
Jackson это библиотека, которую Spring Boot использует для (де)сериализации JSON.
Что делает:
- Превращает Java-объекты в JSON (ответ API).
- Превращает JSON в Java-объекты (тело запроса).
Пример:
{ "name": "Sumit", "email": "sumit@email.com" }
автоматически маппится в UserDTO в контроллере.
Как они работают вместе:
- Jackson: JSON <-> DTO
- ModelMapper: DTO <-> Entity
- DTO: слой-контракт между внешними клиентами и внутренними моделями
DTO защищает доменную модель, Jackson работает с JSON, а ModelMapper убирает рутину маппинга.
👉 Java PortalDataSource, JdbcTemplate, EntityManagerFactory и т.д.
Когда баз становится две, фреймворк не понимает, какую взять за основную. Автоконфигурация перестаёт работать, и нужно явно объявить бины для каждой, одну пометить как @Primary. А дальше подключать их через @Qualifier там, где требуется. ✏️
У кого так было? 👍
👉 Java Portal• Задержки + глобальная аудитория → CDN. Доставляем данные с edge-серверов, чтобы уменьшить latency. • Чтение + узкое место → кэш. Часто читаемые данные кладём в кэш, разгружая базу. • Запись + всплеск трафика → очередь. Пишем асинхронно, сглаживая пики нагрузки. • Распределённая транзакция → Saga. Координируем шаги с компенсациями между сервисами. • ACID + реляционка → SQL. Строгая консистентность и транзакции. • Гибкость + масштаб → NoSQL. Подходит для схемы без фиксированной структуры и горизонтального масштабирования. • SQL + рост → шардинг. Делим базу на шарды, чтобы тянуть нагрузку. • Нагрузка + рост → scale out. Добавляем сервера, а не апгрейдим один. • Трафик + надёжность → балансировка. Распределяем запросы для стабильности. • Критичные сервисы + отказ → резервирование. Дублируем, чтобы не было single point of failure. • Долговечность + сбои → репликация. Держим копии данных для доступности и восстановления. • Запросы + всплески → троттлинг. Ограничиваем лишние запросы. • Нагрузка + пики → автоскейлинг. Автоматически подгоняем мощность под трафик. • Реалтайм + обновления → WebSockets. Двунаправленное живое соединение. • Повтор + безопасность → идемпотентность. Повторяем операции без побочных эффектов.👉 Java Portal
if для компонентов. Так можно сделать приложение гибким -> включать и отключать фичи или менять поведение через конфиг или зависимости проекта, не меняя Java-код.
Для этого используют аннотации, начинающиеся с @Conditional, которые ставят на методы с @Bean или на классы с @Component. Если условие выполнено, Spring создаёт бин. Если нет, то бин игнорируется.
Примеры часто используемых аннотаций:
@ConditionalOnProperty проверяет, есть ли у свойства в application.properties заданное значение. Это основной способ для feature toggling.
@ConditionalOnClass проверяет, есть ли определённый класс в classpath. Удобно, если нужно создавать бин только при наличии библиотеки.
@ConditionalOnMissingBean создаёт бин, только если нет другого бина такого же типа. Подходит для дефолтных или fallback-компонентов.
@ConditionalOnWebApplication создаёт бин только если приложение работает как веб-приложение, например под Tomcat.
👉 Java Portalfinally выполняется всегда, при любых обстоятельствах. Но так ли это на самом деле?
Можешь назвать ситуацию, когда он не сработает?
Ответ — нет, но с важной оговоркой.
Фатальный краш JVM (например, StackOverflowError) это стопроцентный «нет» для finally.
А вот с System.exit() всё интереснее. Если вызов проходит успешно, JVM завершается сразу, и finally пропускается. Если же SecurityManager блокирует вызов, выбрасывается SecurityException, и блок finally выполняется в рамках обычной обработки ошибки.
То есть поведение реально зависит от прав, заданных в рантайме.
👉 Java Portal
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
