春季交易中的一个连接?

And*_*sne 8 spring transactions serializable

我几乎没有关于连接和弹簧交易的问题.

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

  2. 如果我使用Serializable作为隔离级别,那么使用Spring声明事务会弹出以确保在该方法或从原始事务方法调用的任何其他方法中执行数据库操作时始终使用一个连接吗?

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

任何关于这个主题的想法/帮助将不胜感激.谢谢.

更新1 - 对不起,我写了可序列化的传播级别而不是隔离级别.纠正了它.

axt*_*avt 6

  1. Spring事务管理只是不同事务资源的统一接口,例如JDBC连接.由于对于大多数事务资源而言,将事务分布在多个连接上没有意义,因此这些资源的Spring管理事务中的所有操作都在同一连接中执行.当然,如果您使用分布式事务JtaTransactionManager,则涉及分布式事务的每个事务资源都将拥有自己的连接.

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

Spring通过使用连接(例如JDBC Connection)作为线程局部状态的一部分来实现此行为TransactionSynchronizationManager.例如,见DataSourceUtils.