Dans la première partie de cet article, nous avons appris comment améliorer les performances de nos applications, en remplaçant Tomcat par Undertow, qui est un serveur Web performant, en plus d'activer et de configurer la compression des données, pour réduire la taille des réponses HTTP qui transitent sur le réseau.
Maintenant, nous allons parler de la façon d'améliorer les performances de l'application Spring Boot dans la partie persistance, mais nous devons d'abord comprendre ce que JPA, Hibernate et Hikari.
JPA ou Java Persistence API, qui a ensuite été renommé Jakarta Persistence, est un standard de langage Java qui décrit un langage commun interface pour les frameworks de persistance des données.
La spécification JPA définit le mappage relationnel d'objet en interne, plutôt que de s'appuyer sur des implémentations de mappage spécifiques au fournisseur.
Hibernate est un des frameworks ORM qui réalise l'implémentation concrète de la spécification JPA, En d'autres termes, si cette spécification décrit la nécessité de méthodes pour persister, supprimer, mettre à jour et récupérer des données, qui va en fait, la construction de ces comportements est Hibernate, ainsi que EclipseLink, qui est un autre ORM .
Hikari est un framework de regroupement de connexions, qui se charge de gérer les connexions à la base de données, en les gardant ouvertes afin qu'elles puissent être réutilisées, c'est-à-dire , c'est un cache de connexions pour les requêtes futures, rendant l'accès à la base de données plus rapide et réduisant le nombre de nouvelles connexions à créer.
Une configuration que nous pouvons effectuer pour améliorer les performances est la suivante :
Utilisation de 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
Utilisation de application.properties :
spring.datasource.hikari.auto-commit=false spring.datasource.hikari.connection-timeout=50 spring.datasource.hikari.max-lifetime=600000 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.pool-name=master spring.datasource.jpa.open-in-view=false spring.datasource.jpa.show-sql=true spring.datasource.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.generate_statistics=true spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true
Donnons maintenant un bref résumé des options :
spring.datasource.hikari.auto-commit : Si faux, chaque connexion renvoyée par le pool de connexions sera accompagnée de auto-commit désactivé.
spring.datasource.hikari.connection-timeout : Temps, en millisecondes, pendant lequel le client attendra une connexion depuis le pool. Il est préférable de définir un court délai d'attente pour échouer rapidement et renvoyer un message d'erreur, plutôt que de faire attendre le client indéfiniment.
spring.datasource.hikari.max-lifetime : Durée maximale pendant laquelle une connexion peut rester active. La configuration de ce paramètre est cruciale pour éviter les échecs dus à des connexions problématiques et augmenter la sécurité, car les connexions actives depuis longtemps sont plus vulnérables aux attaques.
spring.datasource.hikari.maximum-pool-size : taille maximale du pool, y compris les connexions inactives et en cours d'utilisation, déterminant le nombre maximum de connexions actives à la base de données. Si le pool atteint cette limite et qu'il n'y a pas de connexions inactives, les appels à getConnection() seront bloqués pendant jusqu'à connectionTimeout millisecondes avant d'échouer.
spring.datasource.hikari.minimum-idle : nombre minimum de connexions que le pool maintient lorsque la demande est faible. Le pool peut réduire les connexions jusqu'à 10 et les recréer selon les besoins. Cependant, pour des performances maximales et une meilleure réponse aux pics de demande, il est recommandé de ne pas définir cette valeur, permettant ainsi à Hikari de fonctionner comme un pool de taille fixe. Par défaut : identique à spring.datasource.hikari.maximum-pool-size.
spring.datasource.hikari.pool-name : Nom défini par l'utilisateur pour la connexion pool et apparaît principalement dans les consoles de gestion de registre et JMX pour identifier piscines et leurs paramètres.
spring.datasource.jpa.open-in-view : Lorsque OSIV (Ouvrir la session en vue) est activé, une session est maintenue tout au long de la requête, même sans l'annotation @Transactional. Cela peut entraîner des problèmes de performances, tels qu'un manque de réponses de l'application, car la session maintient la connexion à la base de données jusqu'à la fin de la requête.
spring.datasource.jpa.show-sql : affiche le journal SQL en cours d'exécution dans notre application. Nous le laissons généralement activé en développement, mais désactivé en production.
spring.datasource.jpa.hibernate.ddl-auto : Configure le comportement de Hibernate par rapport au schéma de la base de données. Il peut avoir les valeurs suivantes :
spring.jpa.properties.hibernate.generate_statistics : sert à collecter des informations détaillées sur Hibernate, telles que les temps d'exécution des requêtes, le nombre de requêtes exécutées et d'autres mesures.
spring.jpa.properties.hibernate.connection.provider_disables_autocommit : informe Hibernate que nous avons désactivé la auto-commit des fournisseurs (PostgreSQL, MySQL, etc.). Cela a un impact sur les performances car Hibernate devra obtenir une connexion du pool pour savoir si la auto-commit est activée ou non. , pour chaque transaction qu'il effectue.
Sur ce, nous clôturons la deuxième partie de l'article. Tous les paramètres présents ne concernaient pas les performances, mais ceux qui ont vraiment un impact sont les paramètres Hikari tels que commit automatique et taille du pool , ceux de JPA et Hibernate comme OSIV (Open Session In View) et vous informons que nous avons désactivé le auto-commit des fournisseurs.
Dans la partie suivante, nous parlerons des exceptions et de la manière dont elles peuvent être configurées, pour économiser les ressources de la JVM (Java Virtual Machine).
Références :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!