2011-05-17 4 views
7

J'ai quelques questions concernant les connexions et les transactions de printemps.Une connexion dans la transaction de printemps?

  1. ne se sert de ressort de la même instance de connexion lorsque plusieurs méthodes effectuant des opérations DML & DDL sont exécutées dans une transaction (niveau de propagation REQUIS)? J'ai lu qu'il maintient la même connexion mais ne sait pas pourquoi et comment le fait-il techniquement? Tout en expliquant comment fournir des indices dans le code source du printemps, il serait utile. Si j'utilise Serializable comme niveau d'isolation, utiliserais-je des transactions déclaratives printanières pour s'assurer qu'une connexion est toujours utilisée lors de l'exécution des opérations de base de données dans cette méthode ou dans toute autre méthode appelée à partir de la méthode transactionnelle originale?

Y a-t-il des points que je devrais garder à l'esprit lorsque je travaille avec Spring Transactions en considérant ce sujet?

Une pensée/aide sur ce sujet serait appréciée. Merci.

Mise à jour 1 - Désolé par erreur J'avais écrit le niveau de propagation sérialisable au lieu du niveau d'isolement. Corrigé

Répondre

5
  1. La gestion des transactions de printemps est simplement une interface unifiée pour différentes ressources transactionnelles, telles que les connexions JDBC. Puisque pour la plupart des ressources transactionnelles, il n'est pas logique d'avoir une transaction qui se propage sur plusieurs connexions, toutes les opérations dans les transactions gérées par Spring pour ces ressources sont exécutées dans la même connexion. Bien sûr, si vous utilisez des transactions distribuées avec JtaTransactionManager, chaque ressource transactionnelle impliquée dans la transaction distribuée aura sa propre connexion.

  2. Les niveaux d'isolation de transaction n'ont rien à voir avec la gestion des transactions Spring. Their meaning is defined in the database theory. En outre, ils ne sont pas liés à la propagation de la transaction.

Spring implémente ce comportement par des connexions de stroing (tels que JDBC Connection s) comme une partie de l'état-fil local à l'aide TransactionSynchronizationManager. Voir, par exemple, DataSourceUtils.

+0

Pouvez-vous élaborer sur les points ci-dessous. 1. "Puisque pour la plupart des ressources transactionnelles, il n'est pas logique d'avoir une transaction qui se propage sur plusieurs connexions". De quelles ressources transactionnelles parlez-vous? 2. Comment Spring parvient-elle en interne à obtenir la même connexion pour toutes les opérations db effectuées dans une transaction? (Si vous pouvez pointer du code de printemps, je peux jeter un oeil à ce serait génial). –

+0

Dans la question par erreur, j'ai ajouté le niveau de propagation sérialisable au lieu du niveau d'isolement. Corrigé –

+0

@Amit: Les ressources transactionnelles sont des ressources qui fournissent un comportement transactionnel. Basiquement, ce sont les bases de données et les files d'attente de messages. – axtavt

Questions connexes