Библиотека Java разработчика
10.8K subscribers
1.14K photos
563 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Совет💡

Будьте осторожны при использовании @AllArgsConstructor от Lombok. Для генерации конструктора он использует порядок полей в классе. Если поля имеют одинаковый тип и вы переставите их местами, то начнете писать в разные поля, и компилятор не сможет помочь.

👉@BookJava
👍14
Советы по Spring 💡

Создайте отказоустойчивый микросервис с помощью паттерна Circuit Breaker, используя Resilience4j. 🔥

https://resilience4j.readme.io/

👉@BookJava
👍6
Совет по Java 💡

Чтобы сделать большие и сложные цепочки компараторов более читаемыми, мне нравится присваивать компараторы переменным, имена которых начинаются с "by". Таким образом, вызов sorted() становится меньше и читается почти как естественный язык. Кроме того, вы можете использовать статический импорт.

👉@BookJava
👍17🔥2
Советы по Spring🚀

Ведение журнала HTTP-запросов с помощью фильтра CommonsRequestLoggingFilter.

Включите ведение журнала запросов с помощью фильтра CommonsRequestLoggingFilter для получения подробной информации о входящих запросах.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/CommonsRequestLoggingFilter.html

#SpringTip #Java

👉@BookJava
👍6🎉3
Spring WebFlux с Server-Sent Events 🚀

Улучшите свои real-time приложения с помощью #SpringWebFlux и Server-Sent Events! 🔥

#Java #SpringFramework

👉@BookJava
🔥5👍2
Совет по Java 💡

При создании стандартных HTTP-заголовков для ответов Spring MVC, вместо того чтобы предоставлять их в виде строк, можно воспользоваться специальными билдерами. Они позволяют создавать заголовки более типобезопасным способом. Ознакомьтесь с методами `set()` класса `HttpHeaders`, которые можно настроить таким образом.

#Java #SpringFramework

👉@BookJava
👍61
Это очень подробный пост о проблеме, которую мы наблюдали в Virtual Threads с " pinning" в Netflix.

https://netflixtechblog.com/java-21-virtual-threads-dude-wheres-my-lock-3052540e231d

#Java #VirtualThreads

👉@BookJava
👍3
Совет по JPA 🚀

Упростите свои #Java модели данных, встраивая сложные типы непосредственно в ваши сущности с помощью аннотации
@Embedded в @JPA! Это идеально подходит для многократно используемых компонентов, таких как адреса. 🔥


#Hibernate #SpringBoot #JavaDevelopment #ORM

👉@BookJava
👍7
Совет по @SpringData

Если вы используете параметр hibernate.use_sql_comments, чтобы показать, какой запрос JPQL вызвал какой SQL запрос, вы можете дополнительно использовать аннотацию (@)Meta из Spring Data JPA, чтобы задать пользовательский комментарий для вашего JPQL запроса.

#Java

👉@BookJava
👍3🔥2🥰1
Адаптер (Adapter) — объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.
Мост (Bridge) — структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
Компоновщик (Composite) — объект, который объединяет в себе объекты, подобные ему самому.
Декоратор (Decorator) — класс, расширяющий функциональность другого класса без использования наследования.
Фасад (Facade) — объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
Приспособленец (Flyweight) — это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
Заместитель (Proxy) — объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.

👉@BookJava
👍15
🚀 Совет по Java API 🚀

java.nio.file.WatchService - мониторинг событий файловой системы в реальном времени. Обнаружение изменений файлов и директорий независимо от платформы. 🔥

https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/nio/file/WatchService.html

#Java #JavaAPI

👉@BookJava
👍5🥱2
Советы по Spring Boot💡

Улучшите сборку образа контейнера @springboot с помощью #Jlink!

https://paketo.io/docs/howto/java/#install-a-minimal-jre-with-jlink

#SpringBoot #Java

👉@BookJava
👍5
Media is too big
VIEW IN TELEGRAM
Структурированная конкуренция

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

источник

👉@BookJava
👍6
Media is too big
VIEW IN TELEGRAM
Spring Data JDBC. Проблемы известные, проблемы неизвестные
Михаил Поливаха

Spring Data JDBC — относительно новый модуль Spring Data. У него своя концепция, свои фичи, свои баги и проблемы. Часть этих проблем известна аудитории и описана в документации. Однако иногда документация врет или недоговаривает. К тому же есть некоторые неочевидные детали реализации, которые могут смутить пользователей библиотеки. Это касается многих аспектов — от генерации SQL до маппинга сущностей.

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

источник

👉@BookJava
👍111
В чём разница между jar и war?

jar и war – расширения платформо-независимых файлов-архивов Java-приложения. Кроме них есть еще третий формат, ear. Все эти форматы – на самом деле просто zip-архивы с классами и другими частями приложения. Вы можете переименовать такой файл в .zip, разархивировать, и посмотреть, что внутри.

JAR – Java Archive. Содержит файлы классов, ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. Может содержать точку входа, и использоваться как цель для исполнения команды java.

WAR – Web Archive. Технически имеет ту же структуру, но другую роль – архив JavaEE web-компонента. Обычно содержит jar-ы с реализацией, JSP, статические файлы фронт-энда, и мета-информацию для сервлет-контейнера (web.xml). В основном используется как деплоймент web-приложения в сервлет-контейнер. С приходом Servlet API 3.0 и embedded-контейнеров, всё больше становится принято запаковывать и web-компоненты в самодостаточные jar (Лозунг Spring Boot: Make jar, not war).

EAR – Enterprise Archive. Для разработчиков, начавших карьеру уже во времена Spring Framework, может показаться совсем экзотичным. Это собранное воедино монолитное JavaEE приложение. Содержит дескрипторы деплоймента и JavaEE модули (веб-модули, EJB, клиентские модули, адаптеры ресурсов). Деплоится в JavaEE Application Server.

Все три типа файлов собираются утилитой jar из JDK.

👉@BookJava
👍7🔥3
Совет по Spring MongoDB 💡

Определение выражений сортировки с использованием type-safe API 🔥

👉@BookJava
4👍1
Совет по @SpringData: при использовании интерфейсных проекций вы можете получить доступ к вложенным объектам, добавив `path` к методу getter. Посмотрите, как метод getDepartmentDeptName получает deptName из сущности Department.

#Java

👉@BookJava
👍9
Совет по Spring Boot💡

Улучшите сборку образа контейнера @springboot с помощью #Jlink! 🔥

https://paketo.io/docs/howto/java/#install-a-minimal-jre-with-jlink

#SpringBoot #Java

👉@BookJava
5👍1
Аудит в Spring Data MongoDB💡

Используйте аннотации @CreatedBy, @LastModifiedBy, @CreatedDate и @LastModifiedDate для автоматического отслеживания времени создания и изменения сущностей, а также пользователя, ответственного за изменения. 🔥

#SpringData

👉@BookJava
🥰5👍3
Советы по Spring Batch 💡

Оптимизируйте свои шаги в @SpringBatch с помощью параметра `startLimit` и определите, сколько раз можно запустить шаг. 🔥

#Java #SpringBatch

👉@BookJava
👍4
🚀 Совет по API Java 🚀

java.util.IdentityHashMap

В отличие от HashMap, этот класс использует равенство ссылок (==), а не равенство объектов (equals()) для определения уникальности ключей, что делает его подходящим для конкретных случаев использования. 🔥

https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/IdentityHashMap.html

👉@BookJava
👍6