我正在使用Spring Boot 1.4并尝试了解Spring Transaction Management的工作原理。
这是我的问题:
假设我有一个方法A
的服务,注明了@Transactional(isolation = SERIALIZABLE)
,另一个方法B
注明了@Transactional(isolation = READ_COMMITED)
。
然后让我们假设一些服务X
按顺序调用这两个方法A
和B
。
我的同事说,Spring
中的每个连接都设置了事务级别。这意味着如果来自池的相同连接用于这两个顺序调用,则事务A
和B
= SERIALIZABLE的隔离级别。
然而,对我而言似乎有点奇怪。我希望这两个事务具有不同级别的隔离,因为所有sql数据库都允许显式地为给定事务设置隔离级别。
我正在尝试阅读文档,但找不到将交易级别分配给连接的地方。
有人可以在这个问题上评判我们吗?
答案 0 :(得分:1)
如果在调用方法A()或B()时没有启动事务,则在调用方法时会创建一个新事务,并在离开该方法时关闭。使用过的连接返回池或关闭
该线程解释了交易关闭时连接会发生什么:
Does Spring close connection after committing transaction?
如果存在包装两个方法的事务,则两个方法只使用一个连接;我猜隔离级别是由更大的事务定义的隔离级别。