В первой части этой статьи мы узнали, как повысить производительность наших приложений, заменив Tomcat на Undertow, что высокопроизводительный веб-сервер, помимо включения и настройки сжатия данных, для уменьшения размера HTTP-ответов, передаваемых по сети.
Теперь мы поговорим о том, как улучшить производительность приложения Spring Boot в части постоянства, но сначала нам нужно понять, что такое JPA, Hibernate и Hikari.
JPA или Java Persistence API, который позже был переименован в Jakarta Persistence, представляет собой стандарт языка Java, описывающий общий интерфейс для систем сохранения данных
СпецификацияJPA определяет реляционное сопоставление объектов внутри компании, а не полагается на реализации сопоставления, специфичные для конкретного поставщика.
Спящий режимHibernate — это одна из ORM фреймворков, которая обеспечивает конкретную реализацию спецификации JPA. то есть, если в этой спецификации описано, что необходимы методы для сохранения, удаления, обновления и извлечения данных, кто будет на самом деле созданием такого поведения является Hibernate, а также EclipseLink, который является еще одним ORM .
ХикариHikari — это инфраструктура пула соединений, которая отвечает за управление соединениями с базой данных, сохраняя их открытыми для возможности повторного использования, т.е. это кэш соединений для будущих запросов, ускоряющий доступ к базе данных и уменьшающий количество новых создаваемых соединений.
Настройка Hikari, JPA и HibernateИспользование application.yml:
spring: hikari: auto-commit: false connection-timeout: 250 max-lifetime: 600000 maximum-pool-size: 20 minimum-idle: 10 pool-name: master jpa: open-in-view: false show-sql: true hibernate: ddl-auto: none properties: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: trueИспользование application.properties:
spring: hikari: auto-commit: false connection-timeout: 250 max-lifetime: 600000 maximum-pool-size: 20 minimum-idle: 10 pool-name: master jpa: open-in-view: false show-sql: true hibernate: ddl-auto: none properties: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: trueТеперь кратко изложим варианты:
Хикари
пулом соединений будет иметь автоматическую фиксацию отключенную.
пула. Предпочтительно установить короткий тайм-аут, чтобы быстро завершить работу и вернуть сообщение об ошибке, а не заставлять клиента ждать бесконечно.
пула, включая простаивающие и используемые подключения, определяющий максимальное количество активных подключений к базе данных. Если пул достигает этого предела и нет простаивающих соединений, вызовы getConnection() будут блокироваться на срок до connectionTimeout миллисекунд, прежде чем произойдет сбой.
pool и отображается в основном в консолях управления реестром и JMX для идентификации пулы и их конфигурации.
OSIV (Открыть сеанс в представлении), сеанс сохраняется на протяжении всего запроса, даже без аннотации @Transactional. Это может вызвать проблемы с производительностью, например отсутствие ответов приложения, поскольку сеанс поддерживает соединение с базой данных до конца запроса.
Hibernate относительно схемы базы данных. Он может иметь следующие значения:
Hibernate о том, что мы отключили автоматическую фиксацию для провайдеров (PostgreSQL, MySQL и т. д.). Это влияет на производительность, поскольку Hibernate потребуется получить соединение из пула, чтобы узнать, включена ли автоматическая фиксация или нет. , за каждую транзакцию, которую он совершает.
Hikari, такие как автоматическая фиксация и размер пула , те из JPA и Hibernate, например OSIV (Открыть сеанс в представлении) и сообщаем вам, что мы отключили автоматическую фиксацию у провайдеров.
В следующей части мы поговорим об исключениях и о том, как их можно настроить, чтобы сэкономить ресурсыJVM (Java Virtual Machine).
Ссылки:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3