Maison > Java > javaDidacticiel > Devriez-vous utiliser OpenSessionInView de Spring Boot ?

Devriez-vous utiliser OpenSessionInView de Spring Boot ?

Patricia Arquette
Libérer: 2024-11-28 17:19:14
original
462 Les gens l'ont consulté

Should You Use Spring Boot's OpenSessionInView?

OpenSessionInView : une mise en garde dans Spring Boot

La propriété spring.jpa.open-in-view dans Spring Boot a été une source de confusion pour de nombreux développeurs. Examinons son objectif, sa valeur par défaut et ses conséquences potentielles.

Qu'est-ce qu'OpenSessionInView ?

OpenSessionInView (OSIV) est une fonctionnalité qui maintient EntityManagerFactory ouverte pendant toute la durée de la requête. -cycle de réponse. Cela permet à Hibernate (le fournisseur de persistance sous-jacent) d'initialiser automatiquement les entités chargées paresseusement, même lorsque la transaction a été validée.

Valeur par défaut

Dans Spring Boot 2.0 et Auparavant, OSIV était activé par défaut s'il n'était pas explicitement défini. Il s'agit principalement d'une compatibilité ascendante avec les anciennes versions d'Hibernate qui nécessitent qu'OSIV fonctionne correctement.

Les inconvénients d'OSIV

Bien que destiné à simplifier l'initialisation des objets, OSIV peut entraîner des problèmes importants problèmes de performances et limitations d'évolutivité :

  • Augmentation de la mémoire consommation : OSIV maintient l'EntityManager et les graphiques d'objets en vie tout au long de la requête, provoquant potentiellement des fuites de mémoire.
  • Conflits de transactions simultanées : OSIV permet à plusieurs transactions de fonctionner sur le même EntityManager, ce qui conduit aux conflits potentiels.
  • Surcharge de connexion à la base de données : Maintenir les connexions à la base de données ouvertes au-delà de leur durée d'utilisation prévue gaspille des ressources et augmente les conflits de regroupement de connexions.

Désactivez OSIV

Pour désactiver OSIV et restaurer une gestion appropriée des ressources, définissez spring.jpa.open-in-view =false dans votre application.properties file.

LazyInitializationException

Si vous désactivez OSIV, vous pouvez rencontrer LazyInitializationException lors de l'accès à des entités chargées paresseusement. Pour résoudre ce problème, utilisez l'annotation @Fetch d'Hibernate ou la récupération rapide explicite dans vos requêtes JPQL.

Conclusion

OpenSessionInView peut sembler un moyen pratique d'éviter les exceptions d'initialisation paresseuse, mais ses inconvénients potentiels l’emportent sur ses avantages. Dans les applications Spring Boot modernes, OSIV doit être désactivé pour garantir des performances et une utilisation optimales des ressources.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal