Quand utiliser le Printemps @Transactional (propagation = Propagation.Prend en charge)?
Selon le Printemps javadoc @Transactional(propagation = Propagation.SUPPORTS)
L'appui d'une opération courante, d'exécuter des non-transactionnelle et si aucun
existe. Analogue à l'EJB attribut de transaction du même nom.
Il semble que je peux déclarer les méthodes non transactionaly et être fait avec elle donc mes questions sont les.
- Quelles sont les situations où prend en charge la propagation est nécessaire?
- Qu'est-ce que le point de le prend en charge la propagation?
Quelqu'un peut-il donner un exemple réel /scénario où prend en charge a été vraiment utile?
Heva un coup d'oeil à cette réponse: stackoverflow.com/questions/6437828/...
OriginalL'auteur ams | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
Plus simple exemple, je pense, serait une méthode qui envoie un peu de contenu à un serveur JMS. Si vous êtes dans le cadre d'une transaction, vous souhaitez que le message est couplé à l'étendue de la transaction. Mais si il n'y a pas déjà une transaction en cours d'exécution, pourquoi s'embêter à l'appel de la transaction de serveur et de départ juste pour faire un seul message?
Souvenez-vous de ces peut être déclaré sur une API ainsi que d'une mise en œuvre. Donc, même si il n'y a pas beaucoup de différence pour votre cas d'utilisation entre le placer là et ne rien placer là, il ajoute encore de la valeur pour l'API de l'auteur de préciser que les opérations sont en mesure d'être inclus dans une transaction, par opposition à des opérations que peut-être appeler un système externe qui n'a pas de participer à des transactions.
C'est bien sûr dans un JTA contexte. La fonctionnalité n'est pas vraiment pratique à utiliser dans un système où les transactions sont limitées à des ressources locales physique transactions de base de données.
Je pense qu'il peut encore être utile dans un non-distribués paramètre de l'API de marqueur si vous avez des instances de NOT_SUPPORTED et veulent se différencier. Mais vous avez raison, la mise en œuvre de sage, il n'est pas vraiment très différent de mettre rien du tout si tx ne sont pas distribués.
OriginalL'auteur
Il fait une bonne paire, le long avec la
readOnly=true
Transactionnelle drapeau sur une opération de sélection en particulier lors de l'ORM est utilisé:Dans ce cas, vous assurez-vous de ne pas payer le prix de la création d'une nouvelle transaction si il n'y a pas déjà un, juste pour l'exécution d'une opération de sélection.
Bien que si vous avez été dans ce processus de pensée déjà vous pourriez même envisager d'abandonner l'aspect Transactionnel, tous ensemble:
par "fossé de l'aspect Transactionnel", est-ce le même que l'utilisation de @NotTransactional?
Si quelque chose n'a pas d'aspect de transaction, ou est @NotTransactional, et il est appelé à partir de l'intérieur d'une transaction, ce qui se passe? par exemple, si la méthode est Un écrit quelque chose de la DB, puis appelle NotTransactional de la méthode, qui a également écrit quelque chose, alors soit A ou B de jeter un décoché exception, qui se roulé en arrière?
OriginalL'auteur
Selon cette questions Améliorer les performances de Propagation.Prend en charge pour la lecture seule opération vous ne devez pas définir en lecture seule transaction avec la Multiplication.Prend en charge:
C'est pas du tout évident qu'une modification qui aurait pour effet d'améliorer le rendement. Il y a plusieurs aspects dans ce. Premier d'entre eux est que l'article lié est daté et incroyablement erronée que, de manière agressive simplifie les choses. Je peux aller dans les détails si vous voulez, mais je vais en rester là pour l'instant. Il y a beaucoup de choses à jouer dans la performance de l'exécution ici. Sans une transaction en cours, ni la lecture seule drapeau est propagée vers le pilote JDBC (qui serait la cause d'optimisations pour un grand nombre de bases de données n'étant pas appliquée), ni voulez-vous appliquer les optimisations au Printemps de l'APC de la gestion des ressources de code comme explicitement la désactivation de rinçage, ce qui - si elle est appliquée - peut considérablement améliorer les performances dans le cas de la lecture d'un grand nombre de données.
OriginalL'auteur