9

我有几个与连接和弹簧交易有关的问题。

  1. 当在事务中执行多个执行 DML 和 DDL 操作的方法时,spring 是否使用相同的连接实例(传播级别需要)​​?我读过它确实保持相同的连接,但不知道为什么以及如何在技术上做到这一点?在解释如何提供 spring 源代码中的任何提示时,它会有所帮助。

  2. 如果我使用 Serializable 作为隔离级别,使用 Spring Declarative Transactions,spring 是否会确保在该方法或从原始事务方法调用的任何其他方法中执行数据库操作时始终使用一个连接?

考虑到这个主题,在使用 Spring Transactions 时我应该记住哪些要点?

对此主题的任何想法/帮助将不胜感激。谢谢。

更新 1 - 抱歉,我写的是可序列化传播级别而不是隔离级别。更正了它。

4

1 回答 1

7
  1. Spring 事务管理只是对不同事务资源的统一接口,例如 JDBC 连接。由于对于大多数事务性资源来说,让事务分布在多个连接上是没有意义的,因此 Spring 管理的事务中针对这些资源的所有操作都在同一个连接中执行。当然,如果你使用分布式事务JtaTransactionManager,参与分布式事务的每个事务资源都会有自己的连接。

  2. 事务隔离级别与 Spring 事务管理无关。它们的含义是在数据库理论中定义的。此外,它们与事务传播无关。

Spring 通过Connection使用TransactionSynchronizationManager. 例如,参见DataSourceUtils

于 2011-05-17T15:00:37.157 回答