Самый чистый современный паттерн Java для обработки ошибок (без выбрасывания исключений для ожидаемых случаев):
Использовать sealed interface + records + исчерпывающий pattern matching в switch = типобезопасно и контролируется компилятором.
Больше никаких
Преимущества в реальном коде:
- Ноль неожиданных исключений во время выполнения
- Понятно, что может произойти, просто посмотрев на сигнатуру метода
- Значительно проще тестировать и рефакторить
- Читается почти как
👉 Java Portal
Использовать sealed interface + records + исчерпывающий pattern matching в switch = типобезопасно и контролируется компилятором.
Больше никаких
RuntimeException для случаев вроде "not found" / "invalid input" / "unauthorized" — компилятор заставляет обработать каждый возможный результат.Преимущества в реальном коде:
- Ноль неожиданных исключений во время выполнения
- Понятно, что может произойти, просто посмотрев на сигнатуру метода
- Значительно проще тестировать и рефакторить
- Читается почти как
Result в Rust или Result в KotlinPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥6🤔3❤2🤣1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Это начало конца проблемы N+1: представили Single Query Loading
Кратко (TL;DR):
Начиная с версии Spring Data JDBC 3.2.0-M2, фреймворк поддерживает Single Query Loading. Single Query Loading позволяет загружать произвольные агрегаты одним SELECT-запросом.
Чтобы включить Single Query Loading, нужно вызвать
В версии 3.2.0-M2 это работает только для простых агрегатов, состоящих из корневой сущности (aggregate root) и одной коллекции других сущностей. Также это ограничено методами
Ещё одно ограничение: используемая база данных должна поддерживать аналитические функции (также известные как window functions). Все официально поддерживаемые базы данных, кроме in-memory решений (H2 и HSQLDB), это поддерживают.
Single Query Loading можно сокращать как SQL, но, пожалуйста, не делайте этого.
Если хотите понять, как это работает и как мы к этому пришли — читайте дальше.
👉 Java Portal
Кратко (TL;DR):
Начиная с версии Spring Data JDBC 3.2.0-M2, фреймворк поддерживает Single Query Loading. Single Query Loading позволяет загружать произвольные агрегаты одним SELECT-запросом.
Чтобы включить Single Query Loading, нужно вызвать
setSingleQueryLoadingEnabled(true) у вашего RelationalMappingContext.В версии 3.2.0-M2 это работает только для простых агрегатов, состоящих из корневой сущности (aggregate root) и одной коллекции других сущностей. Также это ограничено методами
findAll, findById и findAllByIds в CrudRepository. В будущих версиях эти ограничения будут сняты.Ещё одно ограничение: используемая база данных должна поддерживать аналитические функции (также известные как window functions). Все официально поддерживаемые базы данных, кроме in-memory решений (H2 и HSQLDB), это поддерживают.
Single Query Loading можно сокращать как SQL, но, пожалуйста, не делайте этого.
Если хотите понять, как это работает и как мы к этому пришли — читайте дальше.
Please open Telegram to view this post
VIEW IN TELEGRAM
This is the Beginning of the End of the N+1 Problem: Introducing Single Query Loading.
Level up your Java code and explore what Spring can do for you.
🔥7❤1
Spring Boot: избегайте
Помечая связь как
👉 Java Portal
FetchType.EAGER, если в этом нет реальной необходимости.Помечая связь как
EAGER, вы говорите ORM загружать её каждый раз при загрузке сущности — независимо от того, вызываете ли вы вообще методы этой связи.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Вот почему базы данных — это сложно.
И именно поэтому с ними так интересно работать.
Хороший бенчмаркинг — особенно мощный инструмент для поиска узких мест в производительности. Я очень часто бенчмаркаю базы данных, но это актуально для любого софта, где важна производительность (а это должен быть вообще любой софт!).
5 правил программирования от Rob Pike
1. Правило 1. Невозможно заранее сказать, где программа будет тратить своё время. Узкие места возникают в неожиданных местах, поэтому не пытайтесь гадать и делать «оптимизации на скорость», пока не доказали, что именно там находится bottleneck.
2. Правило 2. Измеряйте. Не оптимизируйте производительность, пока не провели измерения, и даже после этого не делайте этого, если только одна часть кода явно не доминирует над остальными.
3. Правило 3. Сложные (fancy) алгоритмы работают медленно, когда n маленькое, а n обычно маленькое. У таких алгоритмов большие константы. Пока вы не уверены, что n часто бывает большим, не усложняйте. (Даже если n вырастет, сначала примените правило 2.)
4. Правило 4. Сложные алгоритмы более багованные, чем простые, и их значительно сложнее реализовывать. Используйте простые алгоритмы, а также простые структуры данных.
5. Правило 5. Данные — главное. Если вы выбрали правильные структуры данных и грамотно всё организовали, алгоритмы почти всегда становятся очевидными сами по себе. В программировании центральную роль играют структуры данных, а не алгоритмы.
👉 Java Portal
И именно поэтому с ними так интересно работать.
Хороший бенчмаркинг — особенно мощный инструмент для поиска узких мест в производительности. Я очень часто бенчмаркаю базы данных, но это актуально для любого софта, где важна производительность (а это должен быть вообще любой софт!).
5 правил программирования от Rob Pike
1. Правило 1. Невозможно заранее сказать, где программа будет тратить своё время. Узкие места возникают в неожиданных местах, поэтому не пытайтесь гадать и делать «оптимизации на скорость», пока не доказали, что именно там находится bottleneck.
2. Правило 2. Измеряйте. Не оптимизируйте производительность, пока не провели измерения, и даже после этого не делайте этого, если только одна часть кода явно не доминирует над остальными.
3. Правило 3. Сложные (fancy) алгоритмы работают медленно, когда n маленькое, а n обычно маленькое. У таких алгоритмов большие константы. Пока вы не уверены, что n часто бывает большим, не усложняйте. (Даже если n вырастет, сначала примените правило 2.)
4. Правило 4. Сложные алгоритмы более багованные, чем простые, и их значительно сложнее реализовывать. Используйте простые алгоритмы, а также простые структуры данных.
5. Правило 5. Данные — главное. Если вы выбрали правильные структуры данных и грамотно всё организовали, алгоритмы почти всегда становятся очевидными сами по себе. В программировании центральную роль играют структуры данных, а не алгоритмы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Совет по Java : вы можете использовать
👉 Java Portal
LinkedHashMap, чтобы легко реализовать LRU-кэш (Least Recently Used, «наименее недавно используемый»).Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
Какие коллекции следует использовать в многопоточной среде в Java?
[1-й вариант]
- через вызов метода
- преобразует обычную коллекцию в синхронизированную
- создаёт обёртку, которая синхронизирует все операции с помощью ключевого слова
[2-й вариант]
-
- если работа с коллекцией в основном состоит из чтения, это лучший вариант с точки зрения производительности
- потокобезопасность достигается за счёт копирования внутреннего массива при каждом изменении, при этом исходный массив остаётся неизменяемым
- порядок выполнения (visibility/упорядоченность) обеспечивается использованием модификатора
[3-й вариант]
- concurrent-коллекции
- неблокирующие хеш-таблицы:
- неблокирующие очереди:
- широкий набор различных блокирующих очередей
👉 Java Portal
[1-й вариант]
- через вызов метода
Collections.synchronized()- преобразует обычную коллекцию в синхронизированную
- создаёт обёртку, которая синхронизирует все операции с помощью ключевого слова
synchronized[2-й вариант]
-
CopyOnWriteArrayList- если работа с коллекцией в основном состоит из чтения, это лучший вариант с точки зрения производительности
- потокобезопасность достигается за счёт копирования внутреннего массива при каждом изменении, при этом исходный массив остаётся неизменяемым
- порядок выполнения (visibility/упорядоченность) обеспечивается использованием модификатора
volatile для внутреннего массива[3-й вариант]
- concurrent-коллекции
- неблокирующие хеш-таблицы:
ConcurrentSkipListMap, ConcurrentHashMap и ConcurrentSkipListSet (в основе реализации лежит хеш-таблица)- неблокирующие очереди:
ConcurrentLinkedQueue и ConcurrentLinkedDeque- широкий набор различных блокирующих очередей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5
Java 26 вышла. В Java 27 уже планируются обновления безопасности.
JEP 527 добавляет постквантовый гибридный обмен ключами для TLS 1.3 в
Конфигурации JSSE по умолчанию получают это обновление автоматически.
Выбор пользовательских групп остаётся простым 👇
JEP 527 добавляет постквантовый гибридный обмен ключами для TLS 1.3 в
javax.net.ssl, объединяя ML-KEM с классическим ECDHE.Конфигурации JSSE по умолчанию получают это обновление автоматически.
Выбор пользовательских групп остаётся простым 👇
❤3
Я создал шаблонный репозиторий для Claude Code под приложение на Spring Boot — с инструкциями, скиллами и сабагентами 💡
Цель — упростить создание приложения, которое:
- подключается к базе данных
- деплоится в Kubernetes
- запускает тесты с использованием Testcontainers
- и покрывает другие типовые сценарии разработки
https://github.com/piomin/claude-ai-spring-boot
👉 Java Portal
Цель — упростить создание приложения, которое:
- подключается к базе данных
- деплоится в Kubernetes
- запускает тесты с использованием Testcontainers
- и покрывает другие типовые сценарии разработки
https://github.com/piomin/claude-ai-spring-boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔4❤1
JavaClaw — версия OpenClaw для Java, созданная на базе Spring Boot, Spring AI и JobRunr: https://javaclaw.io
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
clawrunr.io
ClawRunr — AI Agents. Pure Java.
A community-driven Java AI agent runtime. Built on Spring AI and JobRunr.
Spring Boot: Лучше использовать глобальные фильтры/интерсепторы только для действительно сквозных (cross-cutting) задач и избегать бизнес-логики. Они выполняются для каждого входящего HTTP-запроса.
Некоторые хорошие кейсы использования сквозной функциональности (cross-cutting concerns), реализуемой через фильтры и интерсепторы:
Фильтры (раньше, чем Spring MVC):
- Обработка CORS
- Кодировка (CharacterEncodingFilter)
Интерсепторы (Spring MVC):
- Проверки аутентификации/авторизации
- Замер времени выполнения запроса / метрики
- Обработка локали
- Добавление общих заголовков
Плохой пример:
👉 Java Portal
Некоторые хорошие кейсы использования сквозной функциональности (cross-cutting concerns), реализуемой через фильтры и интерсепторы:
Фильтры (раньше, чем Spring MVC):
- Обработка CORS
- Кодировка (CharacterEncodingFilter)
Интерсепторы (Spring MVC):
- Проверки аутентификации/авторизации
- Замер времени выполнения запроса / метрики
- Обработка локали
- Добавление общих заголовков
Плохой пример:
@Component
public class SubscriptionInterceptor implements HandlerInterceptor {
@Autowired
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
String userId = request.getHeader("X-USER-ID");
// Бизнес-логика + обращение к БД внутри интерсептора
User user = userService.findById(userId);
if (user.getSubscription().isExpired()) {
response.setStatus(403);
response.getWriter().write("Subscription expired");
return false;
}
return true;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
❤5
Тебе больше не нужен Lombok
Records заменяют Data, Value, Getter, Setter, ToString, EqualsAndHashCode. var заменяет val. try-with-resources заменяет Cleanup. Твоя IDE справляется с Builder.
Лучшая зависимость — та, которая тебе не нужна.
Java догнала. Пора обновить подход.
https://loiane.com/2026/03/you-dont-need-lombok-anymore/
👉 Java Portal
Records заменяют Data, Value, Getter, Setter, ToString, EqualsAndHashCode. var заменяет val. try-with-resources заменяет Cleanup. Твоя IDE справляется с Builder.
Лучшая зависимость — та, которая тебе не нужна.
Java догнала. Пора обновить подход.
https://loiane.com/2026/03/you-dont-need-lombok-anymore/
Please open Telegram to view this post
VIEW IN TELEGRAM
Loiane Groner
You Don't Need Lombok Anymore
Lombok was a lifesaver. For years, it spared us from writing repetitive getters, setters, constructors, toString, equals, and hashCode. But modern Java has c...
🔥5💊4🤔1
Spring Boot: избегай подключения полного
👉 Java Portal
spring-boot-starter-web, если тебе нужен только Spring MVC, потому что этот стартер подтягивает дополнительные компоненты, например встроенный сервер, которые тебе могут быть не нужны.Instead of importing the full web starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Just set the MVC dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Топ-7 навыков, которые сейчас нужны Java-разработчику, чтобы устроиться на работу:
1. Core Java (8–22)
Streams, records, virtual threads, collections, OOP
2. Spring Boot
REST API, валидация, profiles, AOP, actuator, управление конфигурацией, devtools, кастомные стартеры, обработка ошибок
3. Микросервисы
Feign / WebClient, версионирование API, service discovery, config server, circuit breakers, retries, distributed tracing, API Gateway, SAGA, CQRS
4. Spring Security
JWT, OAuth2, ролевая авторизация
5. Hibernate / JPA
Маппинги, lazy/eager загрузка, JPQL, оптимизация производительности
6. DSA (алгоритмы и структуры данных)
Массивы, деревья, графы, динамическое программирование, хеширование
7. Конкурентность
Thread pools, locks, CompletableFuture, Loom
👉 Java Portal
1. Core Java (8–22)
Streams, records, virtual threads, collections, OOP
2. Spring Boot
REST API, валидация, profiles, AOP, actuator, управление конфигурацией, devtools, кастомные стартеры, обработка ошибок
3. Микросервисы
Feign / WebClient, версионирование API, service discovery, config server, circuit breakers, retries, distributed tracing, API Gateway, SAGA, CQRS
4. Spring Security
JWT, OAuth2, ролевая авторизация
5. Hibernate / JPA
Маппинги, lazy/eager загрузка, JPQL, оптимизация производительности
6. DSA (алгоритмы и структуры данных)
Массивы, деревья, графы, динамическое программирование, хеширование
7. Конкурентность
Thread pools, locks, CompletableFuture, Loom
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
❤7🔥5
Spring Boot: не подключайте полный
👉 Java Portal
spring-boot-starter-web, если вам нужен только Spring MVC — этот стартер тянет лишние компоненты, например встроенный сервер, который может быть вам не нужен.Please open Telegram to view this post
VIEW IN TELEGRAM
💊8❤1
Java Portal | Программирование
Я создал шаблонный репозиторий для Claude Code под приложение на Spring Boot — с инструкциями, скиллами и сабагентами 💡 Цель — упростить создание приложения, которое: - подключается к базе данных - деплоится в Kubernetes - запускает тесты с использованием…
Несколько дней назад был опубликован шаблон Claude Code для Spring Boot с инструкциями, skills и сабагентами
В этом гайде вы найдёте объяснение шаблона, пример его использования и результаты
👉 Java Portal
В этом гайде вы найдёте объяснение шаблона, пример его использования и результаты
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - piomin/claude-ai-spring-boot: Claude Code template for Spring Boot and other staff (included in the tags)
Claude Code template for Spring Boot and other staff (included in the tags) - piomin/claude-ai-spring-boot
👍3🌚1
Агентам Spring AI нужно уметь искать в интернете, но официального Java SDK для Browserbase нет.
Поэтому Dan Vega сделал свой.
Browserbase предоставляет агентам настоящий браузер для управления. Их новый Search API позволяет агентам находить, куда идти, ещё до запуска полноценной браузерной сессии. Search, fetch, browse. Повышайте уровень только когда это действительно нужно.
Добавьте одну зависимость, укажите свой API-ключ и подключите это как инструмент в Spring AI.
Пример проекта готов и скоро будет доступен.
100% опенсорс
👉 Java Portal
Поэтому Dan Vega сделал свой.
Browserbase предоставляет агентам настоящий браузер для управления. Их новый Search API позволяет агентам находить, куда идти, ещё до запуска полноценной браузерной сессии. Search, fetch, browse. Повышайте уровень только когда это действительно нужно.
Добавьте одну зависимость, укажите свой API-ключ и подключите это как инструмент в Spring AI.
Пример проекта готов и скоро будет доступен.
100% опенсорс
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - danvega/browserbase-spring-boot-starter
Contribute to danvega/browserbase-spring-boot-starter development by creating an account on GitHub.
👍3
Java 26 стал умнее, особенно в части pattern matching.
Теперь работа с выражениями сопоставления с образцом стала значительно стабильнее и предсказуемее.
Что улучшилось:
- Более надёжный вывод типов
компилятор лучше понимает типы в сложных условиях
- Меньше ошибок на краевых случаях
меньше неожиданных падений и предупреждений
- Консистентное поведение
одинаковая логика в
Что это означает на практике:
Раньше, когда условия становились сложнее,
компилятор мог «теряться»
Теперь:
- анализ потока выполнения стал умнее
- переменные из pattern matching корректно распознаются
- код становится чище и безопаснее
Java всё больше приближается к современным языкам
с удобным и предсказуемым контролем типов
👉 Java Portal
Теперь работа с выражениями сопоставления с образцом стала значительно стабильнее и предсказуемее.
Что улучшилось:
- Более надёжный вывод типов
компилятор лучше понимает типы в сложных условиях
- Меньше ошибок на краевых случаях
меньше неожиданных падений и предупреждений
- Консистентное поведение
одинаковая логика в
if и switchЧто это означает на практике:
Раньше, когда условия становились сложнее,
компилятор мог «теряться»
Теперь:
- анализ потока выполнения стал умнее
- переменные из pattern matching корректно распознаются
- код становится чище и безопаснее
Java всё больше приближается к современным языкам
с удобным и предсказуемым контролем типов
Please open Telegram to view this post
VIEW IN TELEGRAM
Релиз IntelliJ IDEA 2026.1 уже здесь! Узнай о всех последних обновлениях — они подробно разобраны и продемонстрированы на странице What’s New.
Зацени👇
https://www.jetbrains.com/idea/whatsnew/
👉 Java Portal
Зацени
https://www.jetbrains.com/idea/whatsnew/
Please open Telegram to view this post
VIEW IN TELEGRAM
JetBrains
What's New in IntelliJ IDEA
Discover IntelliJ IDEA 2026.1 with support for more AI agents and ACP, Java 26 and Kotlin 2.3.20, Spring insights, and productivity boosts.