Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.64K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
🚧🚧 От логов к аудиту

В статье коротко рассмотрены различия между обычными логами и аудит-логами. Основное внимание уделено реализации аудит-логирования в Java, включая использование аннотаций и АОП, приведен пример настройки роутинга логов через rsyslog.

Читать статью

#гайд
Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и DTO с помощью библиотеки Blaze Persistence. Тогда вы сможете воспользоваться преимуществами, например, паттерна Spring repository.
В каких состояниях может пребывать поток?

Поток в Java может находиться в следующих состояниях:

— New (Новый): поток создан, но еще не запущен.

— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.

— Running (Выполняется): поток выполняется в настоящий момент.

— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.

— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.

— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.

— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
#дайджест перед выходными

🔽 Spring AI 1.0.0 M1 release — из значимых нововведений: API для создания промптов, похожий на RestClient и JdbcClient, поддержка новых моделей и векторных хранилищ, TestContainers

🔽 Module Imports in Java 23 — автор рассказывает о книге, в которой описывается предварительный просмотр функции, основанной на модулях, которая может быть использована, даже если код не находится в модулях

🔽 Делаем ZIO-Kafka безопаснее и быстрее — пофиксили дублирование сообщений при ребалансе, добавив механизм отложенного выполнения, который дожидается, пока все сообщения в очереди не будут обработаны

🔽 Hibernate ORM 6.6 — небольшая заметка, которая рассказывает об аннотация, которая указывает на то, что в случае наследования сущностей Hibernate должен создавать прокси не на суперкласс, а на конкретного наследника

🔽 Spec-first and code-first, hand in hand — теперь вам не надо разрываться между подходами spec-first или code-first, а использовать оба одновременно
🎓 Продвинутый SQL: секреты профессионалов

Рассказываем о сложных стратегиях оптимизации запросов, продвинутых типах соединений и тонкостях использования SELECT.

Читать статью

#туториал
💪💪 Пишем кастомный Plugin SonarQube

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

Подробности тут

#гайд
#memes

Найден самый полезный совет на свете. Записываем и не забываем.
👶 Новичок в компании: 18 советов, как быстро адаптироваться и освоить новые навыки

Начало работы в новой компании может быть волнующим и сложным, особенно если вы новичок в отрасли. Как быстро освоиться, произвести хорошее впечатление и стать ценным сотрудником?


Читать статью

#туториал
❤️🙏 Помните историю автора «Библиотеки программиста» Станислав Герасимов? Станислав — инвалид с детства. В статье он рассказывал, как получил диплом и строит карьеру в IT.

❗️ В обновленной статье читайте продолжение его истории. И самое главное: очень скоро он отправляется на операцию и ему нужна ваша помощь.
🧔🧔 Строим свой SSO

Серия статей про постройку собственного SSO Server-а.
Единый вход в систему (Single sign-on, SSO) — это решение для аутентификации,
которое дает пользователям возможность входить в несколько приложений и на
несколько веб-сайтов с использованием единовременной аутентификации пользователя.

Продолжение здесь

#туториал
#memes

Заказчик можем всего один моментик подправить?

Его моментик:
Очередной #дайджест для джавистов

🔵 Modules Make javac Easy — про компиляцию и сборку Java-приложения не самым популярным способом в текущее время через javac

🔵 Model Data, Whole Data, and Nothing but the Data — в статье рассматривается принцип моделирования данных в ориентированном на данные программировании (DOP), который заключается в моделировании данных, всех данных и только данных

🔵 Scala toolig ecosystem со Scalar Conference 2024 — с каждым тулом идет в комплекте сводка о том, насколько этот инструмент жив и какие функции хотят добавить

🔵 Model Data Immutably and Transparently — принцип помогает избежать ошибок, связанных с изменением состояния объектов, используемых различными подсистемами

🔵 Мониторинг и профилирование Spring Boot за две строчки — механизм для мониторинга времени выполнения методов, используя аннотацию @ActuatorProfiling и Spring Boot Actuator для экспонирования данных профилирования через настраиваемые конечные точки
Узнаем разницу между 2 датами, представленными в виде строк

Для вычисления разницы между двумя датами, представленными в виде строк, можно использовать классы java.time.LocalDate и java.time.temporal.ChronoUnit из пакета java.time.

В этом примере мы используем метод LocalDate.parse() для преобразования строковых значений в объекты типа LocalDate. Затем мы используем метод ChronoUnit.between() для вычисления разницы между двумя датами в днях, месяцах и годах.

Обратите внимание, что вы должны использовать формат даты «yyyy-MM-dd» для парсинга строковых значений даты. Если ваши строки даты имеют другой формат, вам может потребоваться использовать другой метод для преобразования их в объекты LocalDate.
🤔🤔 Эффективность Spring-приложений в рантайме. Текущее состояние дел и планы на будущее

В свете недавнего выхода Spring Framework 6.1 и Spring Boot 3.2, автор хотел бы поделиться обзором тех усилий, которые предпринимает команда Spring, чтобы позволить разработчикам оптимизировать эффективность их приложений во время выполнения.

В статье:

Spring MVC вместе с Virtual Threads на JDK 21
Развёртывание Spring-приложений в облаке с использованием GraalVM Native Image
Восстановление контрольной точки
Масштабирование приложений до нуля с помощью Spring и Project CRaC
Будущее OpenJDK со Spring AOT и Project Leyden

Читать статью

#почитать
Что такое Lambda-выражения?

Это способ написать анонимные функции (или функциональные объекты) в Java. Они были введены в Java 8 и позволяют передавать поведение как аргументы в методы. Они значительно упрощают работу с такими функциональными интерфейсами, как Runnable, Callable, Comparator и многими другими.

Преимущества:

👉 Краткость: Лямбда-выражения позволяют писать меньше кода.
👉 Читаемость: Код становится более читабельным и понятным.
👉 Поддержка функциональных интерфейсов: Лямбда-выражения работают с функциональными интерфейсами, делая работу с ними проще и интуитивно понятной.
👉 Повышенная производительность: В некоторых случаях лямбда-выражения могут улучшить производительность за счёт оптимизаций, выполненных компилятором.
🚧🚧 Тестирование асинхронного контракта Spring Boot приложения (Kafka Consumer+Producer)

Как написать интеграционный\сервисный\авто тест для Spring Boot приложения, которое взаимодействует с внешним миром исключительно с помощью Kafka. Сначала автор разбирает проблему, а затем поэтапно развивает тесты, чтобы привести их к состоянию defenition-of-done.

Читать статью

#гайд
Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).

Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException.
Привет, друзья! 👋
Мы готовим статью о типичных ошибках начинающих разработчиков. И нам очень нужна ваша помощь! 🙏
Поделитесь своим опытом и мнением в комментариях:
С какими сложностями вы сталкивались в начале своего пути в разработке?
Какие ошибки допускали и как их исправляли?
Что помогло вам быстрее расти профессионально?
Самые интересные и полезные советы мы обязательно включим в статью, а их авторов упомянем в публикации! 😊