我几乎没有关于连接和弹簧交易的问题。
当执行DML& D的多个方法时,spring是否使用相同的连接实例DDL操作是在事务中执行的(传播级别是否必需)?我已经读过它确实保持了相同的连接,但不知道为什么以及如何在技术上做到这一点?在解释如何提供spring源代码中的任何提示时,它会有所帮助。
如果我使用Serializable作为隔离级别使用Spring声明式事务,那么在该方法或从原始事务方法调用的任何其他方法中执行数据库操作时,是否会确保始终使用一个连接?
考虑到这个话题,在使用Spring Transactions时我应该记住哪些要点?
对此主题的任何想法/帮助将不胜感激。感谢。
更新1 - 对不起,我写了可序列化的传播级别而不是隔离级别。纠正了它。
答案 0 :(得分:6)
Spring事务管理只是不同事务资源的统一接口,例如JDBC连接。由于对于大多数事务资源而言,将事务分布在多个连接上没有意义,因此这些资源的Spring管理事务中的所有操作都在同一连接中执行。当然,如果您使用JtaTransactionManager
的分布式事务,则涉及分配事务的每个事务资源都将拥有自己的连接。
事务隔离级别与Spring事务管理无关。 Their meaning is defined in the database theory。此外,它们与事务传播无关。
Spring通过使用Connection
将连接(例如JDBC TransactionSynchronizationManager
)作为线程本地状态的一部分来实现此行为。例如,请参阅DataSourceUtils
。