Совет Spring Framework💡
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
👉@BookJava
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
java.util.Optional
. Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API.👉@BookJava
👍22
Курс по Kubernetes для разработчиков. Видеокурс по Docker в подарок ⤵️
❓ Ваша компания решила мигрировать сервисы на Kubernetes?
❓ Большая часть интересных вам вакансий требует навыков в K8s?
❓ Вы не врубаетесь, где границы ответственности девопсов и разработчиков в работе с кубами?
Разбираемся с этим на курсе Слёрма «Kubernetes для разработчиков» 😎
Старт потока — 22 июля.
ПРОГРАММА КУРСА
Вас ждут:
✅ 7 недель обучения
✅ 112 часов практики + 26 часов теории
✅ Общий чат со студентами, экспертами и куратором
✅ Стенды для отработки практических навыков
✅ Сдача сертификации
✅ Итоговый проект
Эксперты — действующие devops-инженеры:
➡️ Марсель Ибраев, Senior System Engineer G42 Cloud
➡️ Павел Селиванов, архитектор Yandex Cloud
🎁 При оплате обучения до 22 июля — видеокурс по основам Docker в подарок🎁
🔗 ПРОЙТИ ПЕРВЫЕ ТРИ УРОКА БЕСПЛАТНО
❓ Ваша компания решила мигрировать сервисы на Kubernetes?
❓ Большая часть интересных вам вакансий требует навыков в K8s?
❓ Вы не врубаетесь, где границы ответственности девопсов и разработчиков в работе с кубами?
Разбираемся с этим на курсе Слёрма «Kubernetes для разработчиков» 😎
Старт потока — 22 июля.
ПРОГРАММА КУРСА
Вас ждут:
✅ 7 недель обучения
✅ 112 часов практики + 26 часов теории
✅ Общий чат со студентами, экспертами и куратором
✅ Стенды для отработки практических навыков
✅ Сдача сертификации
✅ Итоговый проект
Эксперты — действующие devops-инженеры:
➡️ Марсель Ибраев, Senior System Engineer G42 Cloud
➡️ Павел Селиванов, архитектор Yandex Cloud
🎁 При оплате обучения до 22 июля — видеокурс по основам Docker в подарок🎁
🔗 ПРОЙТИ ПЕРВЫЕ ТРИ УРОКА БЕСПЛАТНО
❤2
Совет 💡
Если вы хотите получить сообщение о первопричине, вы можете легко и безопасно получить его с помощью
👉@BookJava
Если вы хотите получить сообщение о первопричине, вы можете легко и безопасно получить его с помощью
Apache Commons ExceptionUtils
. Методы getRootCauseMessage(Exception ex)
выдают сообщение в виде {ClassNameWithoutPackage} {ThrowableMessage}
👉@BookJava
👍10
⚛️Росатом ищет разработчиков на позицию Backend Developer (Java) HR TECH в Гринатом (IT-интегратор Росатома)
Требования: опыт разработки и поддержки микросервисов на Java; опыт работы с реляционным базами данных (PostgreSQL); опыт проведения Сode Review; знание основных методологий разработки программного обеспечения, принципов OOП, шаблонов проектирования, принципов SOLID, DRY, KISS; практика использования Test Containers в интеграционных тестах; отличное знание Spring/Spring Boot (Core, MVC/Webflux, Data/Integration, Security, Actuator, Auto configuration, AOP); опыт работы с Kafka; хорошее знание Maven/Gradle и CI/CD систем(Gitlab/Jenkins); профилирование кода, анализ дампов памяти, анализ логов, метрик и трассировок, тонкая настройка JVM.
Мы предлагаем: полностью удалённую работу на территории РФ или рабочее место в уютном офисе; конкурентную ЗП и премии, оформление по ТК с удобным графиком, выбор между удалёнкой и офисом, карьерный рост, ДМС со стоматологией, собственную платформу для обучения, конференции и тренинги.
👉Узнать подробнее и откликнуться можно по ссылке.
Требования: опыт разработки и поддержки микросервисов на Java; опыт работы с реляционным базами данных (PostgreSQL); опыт проведения Сode Review; знание основных методологий разработки программного обеспечения, принципов OOП, шаблонов проектирования, принципов SOLID, DRY, KISS; практика использования Test Containers в интеграционных тестах; отличное знание Spring/Spring Boot (Core, MVC/Webflux, Data/Integration, Security, Actuator, Auto configuration, AOP); опыт работы с Kafka; хорошее знание Maven/Gradle и CI/CD систем(Gitlab/Jenkins); профилирование кода, анализ дампов памяти, анализ логов, метрик и трассировок, тонкая настройка JVM.
Мы предлагаем: полностью удалённую работу на территории РФ или рабочее место в уютном офисе; конкурентную ЗП и премии, оформление по ТК с удобным графиком, выбор между удалёнкой и офисом, карьерный рост, ДМС со стоматологией, собственную платформу для обучения, конференции и тренинги.
👉Узнать подробнее и откликнуться можно по ссылке.
hh.ru
Вакансия Backend Developer (Java) HR TECH в Москве, работа в компании Гринатом. ИТ (вакансия в архиве c 10 сентября 2024)
Зарплата: не указана. Москва. Требуемый опыт: более 6 лет. Полная занятость. Дата публикации: 12.08.2024.
🗿6👍3💩3🤮2
Как отладить удаленное приложение?
Если приложение работает не в продакшне, его паузы допустимы, а у потенциального злоумышленника нет сетевого доступа к хосту, стандартный способ отладки – непосредственно remote debug. Для этого приложение запускается с включенным протоколом удаленной отладки JDWP. Приложение принимает на указанный порт подключения отладчика. Это может быть отдельная утилита jdb, или встроенная в IDE.
В JDK поставляется набор инструментов для мониторинга. Например Java Mission Control и JConsole позволяют подключиться к приложению и посмотреть множество показателей его здоровья. Полный список инструментов специфичен для конкретной JVM, для HotSpot можно посмотреть в документации.
Вне зависимости от обстоятельств, всегда необходимо заранее позаботиться о диагностической информации номер один – логах. Как минимум, ни один встроенный инструмент не покажет вам информацию о событиях, определяемых бизнес-логикой вашего приложения. Логироваться должен необходимый минимум, который позволит при любом инциденте понять, что произошло.
В стандартную поставку Java включен пакет для логгирования java.util.logging, позже остановимся на нём подробнее. Также существует ряд популярных библиотек: Log4j, SLF4J, Logback. Про техники и сложности логгирования современного энтерпрайза есть неплохой доклад.
👉@BookJava
Если приложение работает не в продакшне, его паузы допустимы, а у потенциального злоумышленника нет сетевого доступа к хосту, стандартный способ отладки – непосредственно remote debug. Для этого приложение запускается с включенным протоколом удаленной отладки JDWP. Приложение принимает на указанный порт подключения отладчика. Это может быть отдельная утилита jdb, или встроенная в IDE.
В JDK поставляется набор инструментов для мониторинга. Например Java Mission Control и JConsole позволяют подключиться к приложению и посмотреть множество показателей его здоровья. Полный список инструментов специфичен для конкретной JVM, для HotSpot можно посмотреть в документации.
Вне зависимости от обстоятельств, всегда необходимо заранее позаботиться о диагностической информации номер один – логах. Как минимум, ни один встроенный инструмент не покажет вам информацию о событиях, определяемых бизнес-логикой вашего приложения. Логироваться должен необходимый минимум, который позволит при любом инциденте понять, что произошло.
В стандартную поставку Java включен пакет для логгирования java.util.logging, позже остановимся на нём подробнее. Также существует ряд популярных библиотек: Log4j, SLF4J, Logback. Про техники и сложности логгирования современного энтерпрайза есть неплохой доклад.
👉@BookJava
👍6
Бывают ли в Java утечки памяти?
Сначала стоит сказать, что это такое. Утечка памяти (memory leak) в широком смысле – потеря доступа к некоторой сущности, которая при этом всё еще остается «живой» и расходует ресурсы компьютера.
Основное отличие Java от языков вроде C – автоматическое управление памятью. В общем случае вам не нужно думать об удалении объекта из памяти. Когда он перестал быть нужен, сборщик мусора сделает это за вас.
Но всё-таки бывают случаи, когда JVM не способна помочь, и прибираться за собой нужно вручную:
1. Объекты в статических полях. Обычно они живут пока живёт класслоадер, который обычно живет до конца работы приложения. В эту же группу риска попадают синглтоны, которые обычно базируются на статиках. Отдельного внимания заслуживает случай утечки ThreadLocal.
2. Взаимодействие с нативным кодом и ручное управление памятью. Когда вы решаетесь на ручное/внешнее управление, вся ответственность за сборку мусора переходит на вас. Это касается использования Unsafe и нативных библиотек. Сюда же попадают различные утечки внешних ресурсов: например соединений с базой через нативный драйвер.
3. Неправильное использование коллекций. Несогласованность методов equals-hashCode может позволить ключам теряться внутри HashMap/HashSet. Размер зарезервированной памяти часто не совпадает с размером содержимого: тот же HashMap, однажды раздувшись, не умеет уменьшаться.
4. Использование finalize. Вмешиваясь в нормальную работу GC, вы, естественно, можете её нарушить. Поток финализации имеет низкий приоритет – даже корректная реализация метода может не успеть выполниться и привести к OutOfMemoryError.
5. Утечка inner-класса. В отличие от nested, inner класс содержит неявную ссылку на своего хозяина. Так что экземпляр хозяина гарантированно будет жить пока живут экземпляры его inner-классов.
6. Интернированные строки. Вызовом String.intern() вы подписываетесь под тем, что осознаете что делаете. Ручное использование оптимизационных хитростей JVM не может не сопровождаться риском. Поведение этого метода зависит от версии Java и реализации JVM.
7. Паттерн Flyweight/object pool. И пул строк, и вся модель памяти реализуют его. Неправильная программная реализация паттерна также может привести к утечке объектов – зависанию их в пулле без реальных применений снаружи.
8. Всевозможные логические утечки. Нарушение консистентности модели бизнес-данных может приводить к забытым объектам. Технически это всё еще один из пунктов выше. Типичный пример такой утечки – утечка Activity в Android.
Так что ответ на вопрос – редко, но бывают.
👉@BookJava
Сначала стоит сказать, что это такое. Утечка памяти (memory leak) в широком смысле – потеря доступа к некоторой сущности, которая при этом всё еще остается «живой» и расходует ресурсы компьютера.
Основное отличие Java от языков вроде C – автоматическое управление памятью. В общем случае вам не нужно думать об удалении объекта из памяти. Когда он перестал быть нужен, сборщик мусора сделает это за вас.
Но всё-таки бывают случаи, когда JVM не способна помочь, и прибираться за собой нужно вручную:
1. Объекты в статических полях. Обычно они живут пока живёт класслоадер, который обычно живет до конца работы приложения. В эту же группу риска попадают синглтоны, которые обычно базируются на статиках. Отдельного внимания заслуживает случай утечки ThreadLocal.
2. Взаимодействие с нативным кодом и ручное управление памятью. Когда вы решаетесь на ручное/внешнее управление, вся ответственность за сборку мусора переходит на вас. Это касается использования Unsafe и нативных библиотек. Сюда же попадают различные утечки внешних ресурсов: например соединений с базой через нативный драйвер.
3. Неправильное использование коллекций. Несогласованность методов equals-hashCode может позволить ключам теряться внутри HashMap/HashSet. Размер зарезервированной памяти часто не совпадает с размером содержимого: тот же HashMap, однажды раздувшись, не умеет уменьшаться.
4. Использование finalize. Вмешиваясь в нормальную работу GC, вы, естественно, можете её нарушить. Поток финализации имеет низкий приоритет – даже корректная реализация метода может не успеть выполниться и привести к OutOfMemoryError.
5. Утечка inner-класса. В отличие от nested, inner класс содержит неявную ссылку на своего хозяина. Так что экземпляр хозяина гарантированно будет жить пока живут экземпляры его inner-классов.
6. Интернированные строки. Вызовом String.intern() вы подписываетесь под тем, что осознаете что делаете. Ручное использование оптимизационных хитростей JVM не может не сопровождаться риском. Поведение этого метода зависит от версии Java и реализации JVM.
7. Паттерн Flyweight/object pool. И пул строк, и вся модель памяти реализуют его. Неправильная программная реализация паттерна также может привести к утечке объектов – зависанию их в пулле без реальных применений снаружи.
8. Всевозможные логические утечки. Нарушение консистентности модели бизнес-данных может приводить к забытым объектам. Технически это всё еще один из пунктов выше. Типичный пример такой утечки – утечка Activity в Android.
Так что ответ на вопрос – редко, но бывают.
👉@BookJava
👍5
Spring Boot Microservices проект электронной коммерции: пошаговое руководство
В этом уроке мы создадим простое приложение для электронной коммерции, используя архитектуру микросервисов с Spring Boot и Spring Cloud. Мы создадим следующие микросервисы:
⚫️ Сервис продуктов: Управляет информацией о продукте.
⚫️ Сервис заказов: Управляет заказами клиентов.
⚫️ Inventory Service: Управляет инвентаризацией продукции.
⚫️ Сервер Eureka Server: Обнаружение сервисов.
⚫️ Шлюз API: Действует как единая точка входа в систему.
https://www.sourcecodeexamples.net/2024/05/spring-boot-microservices-e-commerce-project.html
👉@BookJava
В этом уроке мы создадим простое приложение для электронной коммерции, используя архитектуру микросервисов с Spring Boot и Spring Cloud. Мы создадим следующие микросервисы:
https://www.sourcecodeexamples.net/2024/05/spring-boot-microservices-e-commerce-project.html
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Совет по Java ☕️
В Java 22 появился новый форматированный тип
👉@BookJava
В Java 22 появился новый форматированный тип
ListFormat
. Он создает или разбирает список конкатенированных строк с учетом локальных особенностей. Предусмотрено 3 типа конкатенации: STANDARD, OR и UNIT, и 3 стиля для каждого типа: FULL, SHORT и NARROW.👉@BookJava
🔥8👍3
Советы по Java 💡
Как инициализировать
Но вы также можете воспользоваться функцией "инициализации двойной скобкой"
👉@BookJava
Как инициализировать
collections
или map в Java? Конечно, вы можете использовать, например, статическую инициализацию фабрики (`List.of(...)
` или `Map.of(...)
`). Но вы также можете воспользоваться функцией "инициализации двойной скобкой"
👉@BookJava
👍9👎1🤔1🤓1
How to map Java Enum to custom values with JPA and Hibernate
Заметка, в которой рассказывается о том, как маппить Enum не в имя или порядковый номер, а в какое-то кастомное поле, содержащееся в енаме, используя для этого кастомный конвертер.
https://vladmihalcea.com/java-enum-custom-values/
👉@BookJava
Заметка, в которой рассказывается о том, как маппить Enum не в имя или порядковый номер, а в какое-то кастомное поле, содержащееся в енаме, используя для этого кастомный конвертер.
https://vladmihalcea.com/java-enum-custom-values/
👉@BookJava
Vlad Mihalcea
How to map Java Enum to custom values with JPA and Hibernate - Vlad Mihalcea
Learn how to map Java Enum objects to custom values when using JPA and Hibernate. This is needed when we have to reorder the Enum values.
👏4👍2
Эффективность Spring-приложений в рантайме. Текущее состояние дел и планы на будущее
Перевод статьи об оптимизации Spring-приложений. Рассматриваются как уже доступные GraalVM Native Image и Project CRaC, так и будущие оптимизации, входящие в Project Leyden.
В свете недавнего выхода Spring Framework 6.1 и Spring Boot 3.2, мы хотели бы поделиться обзором тех усилий, которые предпринимает команда Spring, чтобы позволить разработчикам оптимизировать эффективность их приложений во время выполнения.
https://habr.com/ru/companies/spring_aio/articles/824328/
👉@BookJava
Перевод статьи об оптимизации Spring-приложений. Рассматриваются как уже доступные GraalVM Native Image и Project CRaC, так и будущие оптимизации, входящие в Project Leyden.
В свете недавнего выхода Spring Framework 6.1 и Spring Boot 3.2, мы хотели бы поделиться обзором тех усилий, которые предпринимает команда Spring, чтобы позволить разработчикам оптимизировать эффективность их приложений во время выполнения.
https://habr.com/ru/companies/spring_aio/articles/824328/
👉@BookJava
👍6❤3
Совет Spring Framework💡
Вы можете автосопрягать несколько бинов, реализующих определенный интерфейс, в список, содержащий все реализации. Определите список с общим типом, который вы хотите использовать. Вы можете использовать инъекцию конструктора, как показано на картинке, или инъекцию поля.
👉@BookJava
Вы можете автосопрягать несколько бинов, реализующих определенный интерфейс, в список, содержащий все реализации. Определите список с общим типом, который вы хотите использовать. Вы можете использовать инъекцию конструктора, как показано на картинке, или инъекцию поля.
👉@BookJava
👍12🤔2
🚀 Расширенные советы по Spring Boot🚀
Создание собственного FailureAnalyzer
Перехват исключений при запуске и преобразование их в человекочитаемые сообщения эффективно достигается с помощью FailureAnalyzer в Spring Boot 🔥.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.application.failure-analyzer
👉@BookJava
Создание собственного FailureAnalyzer
Перехват исключений при запуске и преобразование их в человекочитаемые сообщения эффективно достигается с помощью FailureAnalyzer в Spring Boot 🔥.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.application.failure-analyzer
👉@BookJava
🔥5👍2
Совет 💡
Добавьте в JDBC URL свойство
👉@BookJava
Добавьте в JDBC URL свойство
ApplicationName
(зависит от БД, не в каждой БД оно есть!). Таким образом, в списке сессий вместо имени JDBC-драйвера будет отображаться имя набора. Это поможет при поиске неисправностей, когда несколько приложений подключаются к одной и той же БД.👉@BookJava
👍9
Spring Boot с ограничением скорости 🚀
Реализуйте ограничение скорости с помощью Bucket4j! 🚀
https://bucket4j.com/
#SpringBoot #RateLimiting
👉@BookJava
Реализуйте ограничение скорости с помощью Bucket4j! 🚀
https://bucket4j.com/
#SpringBoot #RateLimiting
👉@BookJava
👍10
🚀 Совет по Spring 🚀
Маршрутизация источников данных с помощью AbstractRoutingDataSource
Реализуйте динамическую маршрутизацию источников данных с помощью
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.html
#SpringTip #Java
👉@BookJava
Маршрутизация источников данных с помощью AbstractRoutingDataSource
Реализуйте динамическую маршрутизацию источников данных с помощью
AbstractRoutingDataSource
для сценариев с несколькими базами данных. 🔥https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.html
#SpringTip #Java
👉@BookJava
docs.spring.io
AbstractRoutingDataSource (Spring Framework 6.2.10 API)
declaration: package: org.springframework.jdbc.datasource.lookup, class: AbstractRoutingDataSource
👍4
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Объектно-ориентированное программирование на Java
Принципы объектно-ориентированного программирования
Описание класса и создание объектов в Java
Ключевое слово this в Java
Модификаторы классов, полей и методов в Java
Конструкторы в языке Java
Геттеры и сеттеры. Удаление объектов в Java
Объекты как параметры методов в Java
Переопределение методов класса Object
Пример решения задачи на создание класса в Java
Статические члены класса в Java
источник
👉@BookJava
Принципы объектно-ориентированного программирования
Описание класса и создание объектов в Java
Ключевое слово this в Java
Модификаторы классов, полей и методов в Java
Конструкторы в языке Java
Геттеры и сеттеры. Удаление объектов в Java
Объекты как параметры методов в Java
Переопределение методов класса Object
Пример решения задачи на создание класса в Java
Статические члены класса в Java
источник
👉@BookJava
👍3😁2