10 лучших практик производительности Spring Boot
Spring Framework - один из самых популярных и известных фреймворков для разработки приложений в экосистеме Java, а Spring Boot упрощает процесс создания приложений на базе Spring, предоставляя предварительно настроенные модули, автоматическую конфигурацию, стартовые зависимости и многое другое. Такая простота, популярность и стабильность привели к тому, что многие системы были реализованы с помощью Spring Boot, и вполне возможно, что некоторые из них не оптимизированы и не производительны.
В этой статье мы сначала обсудим, что такое производительность в целом, а затем рассмотрим 10 лучших практик производительности Spring Boot, чтобы сделать наш Spring Boot быстрым и ресурсоэффективным.
https://digma.ai/10-spring-boot-performance-best-practices/
👉@BookJava
Spring Framework - один из самых популярных и известных фреймворков для разработки приложений в экосистеме Java, а Spring Boot упрощает процесс создания приложений на базе Spring, предоставляя предварительно настроенные модули, автоматическую конфигурацию, стартовые зависимости и многое другое. Такая простота, популярность и стабильность привели к тому, что многие системы были реализованы с помощью Spring Boot, и вполне возможно, что некоторые из них не оптимизированы и не производительны.
В этой статье мы сначала обсудим, что такое производительность в целом, а затем рассмотрим 10 лучших практик производительности Spring Boot, чтобы сделать наш Spring Boot быстрым и ресурсоэффективным.
https://digma.ai/10-spring-boot-performance-best-practices/
👉@BookJava
Проверь насколько хорошо ты знаешь Java и готов освоить Spring!
Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Как используется метод Lock.newCondition()?
Если реализации интерфейса
Как и ожидание на мониторе,
Конкретные реализации
Возвращаясь к поставленному вопросу,
👉@BookJava
Если реализации интерфейса
Lock
представляют высокоуровневую альтернативу блока synchronized, то реализации его спутника, интерфейса Condition
– альтернатива методам notify/wait. Оба этих интерфейса относятся к пакету java.util.concurrent.locks
.Как и ожидание на мониторе,
Condition
реализует примитив синхронизации «Условная переменная». Один или несколько потоков зависают на объекте-кондишне с помощью варианта метода await (ждут удовлетворения условия). Другой поток пробуждает их методами signal
и signalAll
(сигнализирует об удовлетворении условия).Конкретные реализации
Condition
всегда решают те же задачи, что блокировка на мониторе, но в теории могут отличаться в нюансах поведения. Например, может не быть требования вызывать ожидание/сигнал только при захваченном локе (аналог требования, по которому notify/wait
всегда вызываются в synchronized
). Или может гарантироваться порядок получения сигнала ожидающими потоками.Возвращаясь к поставленному вопросу,
Condition
всегда связан со своим объектом типа Lock
, и метод Lock.newCondition()
– единственный правильный способ создания кондишна.👉@BookJava
Оплачиваемая стажировка и трудоустройство без опыта — ну ничего себе 😳
Все возможно с Добровольным квалификационным экзаменом! Это бесплатный проект Правительства Москвы, где ты можешь показать свои знания по специальности, запомниться потенциальным работодателям и получить оффер в престижные компании Москвы.
Тебя ждет всего три шага:
1️⃣ Пройди тест
После регистрации на сайте ДКЭ тебе будет доступно 70 профессий по 7 направлениям. Выбирай тест по своей специальности и проверь уровень своих знаний!
2️⃣ Реши кейс
Если ты успешно сдал тест, тебя пригласят на следующий этап, где ты с другими участниками в команде будешь решать реальный кейс одного из работодателей.
3️⃣ Стань победителем
Окажись в числе лучших по общему количеству баллов за оба этапа и получи шанс попасть на оплачиваемую стажировку с дальнейшим трудоустройством.
Готов проявить себя? Регистрируйся и начинай проходить тест — https://dke.moscow
Реклама. АНО "РАЗВИТИЕ ЧЕЛОВЕЧЕСКОГО КАПИТАЛА", АНО "РЧК". ИНН 7710364647. erid: LjN8KWtNV
Все возможно с Добровольным квалификационным экзаменом! Это бесплатный проект Правительства Москвы, где ты можешь показать свои знания по специальности, запомниться потенциальным работодателям и получить оффер в престижные компании Москвы.
Тебя ждет всего три шага:
1️⃣ Пройди тест
После регистрации на сайте ДКЭ тебе будет доступно 70 профессий по 7 направлениям. Выбирай тест по своей специальности и проверь уровень своих знаний!
2️⃣ Реши кейс
Если ты успешно сдал тест, тебя пригласят на следующий этап, где ты с другими участниками в команде будешь решать реальный кейс одного из работодателей.
3️⃣ Стань победителем
Окажись в числе лучших по общему количеству баллов за оба этапа и получи шанс попасть на оплачиваемую стажировку с дальнейшим трудоустройством.
Готов проявить себя? Регистрируйся и начинай проходить тест — https://dke.moscow
Реклама. АНО "РАЗВИТИЕ ЧЕЛОВЕЧЕСКОГО КАПИТАЛА", АНО "РЧК". ИНН 7710364647. erid: LjN8KWtNV
Как из Java приложения запустить другую программу?
Самый простой и базовый способ – с помощью метода
Рекомендуемый, и более управляемый способ – использование класса
В результате запуска команды создается объект класса
Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
👉@BookJava
Самый простой и базовый способ – с помощью метода
Runtime.getRuntime().exec()
. В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк "имя=значение
". Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.Рекомендуемый, и более управляемый способ – использование класса
ProcessBuilder
. Он же применяется внутри метода exec
. Билдер дает, например, средства для использования в команде пайплайнов и редиректов ввода-вывода.В результате запуска команды создается объект класса
Process
. Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle
. Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
👉@BookJava
Устойчивость микросервисных Spring приложений: роль аннотации Transactional в предотвращении утечки соединений
В любом микросервисе четкое управление взаимодействием с базой данных является ключевым фактором для поддержания производительности приложения и его надежности на должном уровне. Обычно мы натыкаемся на странные проблемы с подключением к базе данных во время тестирования производительности. Недавно мы обнаружили критическую проблему внутри слоя репозиториев в нашем микросервисном Spring приложении: неправильная обработка исключения приводила к неожиданным сбоям и нарушению работы сервиса во время тестирования производительности. Эта статья представляет собой анализ проблемы и рассказывает, как она была решена с помощью аннотации
Микросервисные Spring приложения сильно зависят от стабильного и эффективного взаимодействия с базой данных, которое часто осуществляется через Java Persistence API (JPA). Для поддержания высокой производительности важно правильно управлять пулом соединений и предотвращать утечки соединений, чтобы взаимодействие с базой данных не снижало производительность приложения.
https://habr.com/ru/companies/spring_aio/articles/827642/
👉@BookJava
В любом микросервисе четкое управление взаимодействием с базой данных является ключевым фактором для поддержания производительности приложения и его надежности на должном уровне. Обычно мы натыкаемся на странные проблемы с подключением к базе данных во время тестирования производительности. Недавно мы обнаружили критическую проблему внутри слоя репозиториев в нашем микросервисном Spring приложении: неправильная обработка исключения приводила к неожиданным сбоям и нарушению работы сервиса во время тестирования производительности. Эта статья представляет собой анализ проблемы и рассказывает, как она была решена с помощью аннотации
@Transactional
. Микросервисные Spring приложения сильно зависят от стабильного и эффективного взаимодействия с базой данных, которое часто осуществляется через Java Persistence API (JPA). Для поддержания высокой производительности важно правильно управлять пулом соединений и предотвращать утечки соединений, чтобы взаимодействие с базой данных не снижало производительность приложения.
https://habr.com/ru/companies/spring_aio/articles/827642/
👉@BookJava
Ждём вас на третьем занятии серии открытых практических уроков по тестированию Spring-приложений от OTUS, где мы:
- рассмотрим специфику тестирования классических и REST-контроллеров и интеграций с внешними API;
- уделим внимание тому, как проверить, что все конечные точки нашего приложения действительно защищены;
- ответим на все возникающие вопросы.
Спикер — Senior Software Engineer, опытный преподаватель и руководитель курса.
Встречаемся 16 июля в 20:00 мск в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
How-to Build Custom Java Runtimes with Jlink.
Видео о создании пользовательского образа среды выполнения с помощью инструмента командной строки jlink. Создается образ, который содержит только те модули, которые нужны приложению, что уменьшает размер приложения и повышает безопасность.
https://www.youtube.com/watch?v=mJKlxqQQeyI&t=52s
👉@BookJava
Видео о создании пользовательского образа среды выполнения с помощью инструмента командной строки jlink. Создается образ, который содержит только те модули, которые нужны приложению, что уменьшает размер приложения и повышает безопасность.
https://www.youtube.com/watch?v=mJKlxqQQeyI&t=52s
👉@BookJava
YouTube
How-to Build Custom Java Runtimes with Jlink
*Jlink* is a powerful tool in the JDK for creating custom runtimes based on the modules an application needs to run. In this video, we will introduce the key concepts and benefits of using jlink and go through five steps covering the key features used when…
Зачем выбирать ReentrantLock вместо synchronized?
Объект класса
В отличие от блока синхронизации,
Шире и возможные режимы блокировки. Кроме обычного ожидающего
Еще одно отличие – свойство
👉@BookJava
Объект класса
ReentrantLock
решает те же задачи, что и блок synchronized. Поток висит на вызове метода lock()
в ожидании своей очереди занять этот объект. Владеть локом, как и находиться внутри блока synchronized
может только один поток одновременно. unlock()
, подобно выходу из блока синхронизации, освобождает объект-монитор для других потоков.В отличие от блока синхронизации,
ReentrantLock
дает расширенный интерфейс для получения информации о состоянии блокировки. Методы лока позволяют еще до блокировки узнать, занят ли он сейчас, сколько потоков ждут его в очереди, сколько раз подряд текущий поток завладел им.Шире и возможные режимы блокировки. Кроме обычного ожидающего
lock()
, вариант tryLock()
с параметром ожидает своей очереди только заданное время, а без параметра – вообще не ждет, а только захватывает свободный лок.Еще одно отличие – свойство
fair
. Лок с этим свойством обеспечивает «справедливость» очереди: пришедший раньше поток захватывает объект раньше. Блок synchronized
не дает никаких гарантий порядка.👉@BookJava
♨️ Хотите добиться максимальной производительности от своих Java-проектов?
Научитесь искусству измерения производительности и оптимизации кода на нашем увлекательном онлайн-уроке.
Забудьте о гадании и предположениях!
На этом вебинаре мы расскажем вам о мощном инструменте Java Microbenchmark Harness (JMH) и его области применения. Вместе мы разберем работу с производительными тестами и сравнением различных алгоритмов.
Вебинар будет полезен как Java-разработчикам, которые ищут лучшие практики для оптимизации кода, так и тестировщикам, специализирующимся на нагрузочном тестировании.
Спикер — Tech Lead в одном из крупнейших российских банков и кандидат технических наук.
Готовы стать мастером производительности в Java?
➡️ Регистрируйтесь прямо сейчас и откройте новый уровень эффективности в своих проектах: https://vk.cc/cykdYt
Научитесь искусству измерения производительности и оптимизации кода на нашем увлекательном онлайн-уроке.
Забудьте о гадании и предположениях!
На этом вебинаре мы расскажем вам о мощном инструменте Java Microbenchmark Harness (JMH) и его области применения. Вместе мы разберем работу с производительными тестами и сравнением различных алгоритмов.
Вебинар будет полезен как Java-разработчикам, которые ищут лучшие практики для оптимизации кода, так и тестировщикам, специализирующимся на нагрузочном тестировании.
Спикер — Tech Lead в одном из крупнейших российских банков и кандидат технических наук.
Готовы стать мастером производительности в Java?
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет Spring Framework💡
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
👉@BookJava
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
java.util.Optional
. Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API.👉@BookJava
Курс по 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 в подарок🎁
🔗 ПРОЙТИ ПЕРВЫЕ ТРИ УРОКА БЕСПЛАТНО
Совет 💡
Если вы хотите получить сообщение о первопричине, вы можете легко и безопасно получить его с помощью
👉@BookJava
Если вы хотите получить сообщение о первопричине, вы можете легко и безопасно получить его с помощью
Apache Commons ExceptionUtils
. Методы getRootCauseMessage(Exception ex)
выдают сообщение в виде {ClassNameWithoutPackage} {ThrowableMessage}
👉@BookJava
⚛️Росатом ищет разработчиков на позицию 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 в Москве, работа в компании Гринатом. ИТ
Зарплата: не указана. Москва. Требуемый опыт: более 6 лет. Полная занятость. Дата публикации: 12.08.2024.