我正在使用Spring 1.4,并试图了解Spring事务管理是如何工作的。
以下是我的问题:
假设我有一个方法A的服务,该方法是用@Transactional(isolation = SERIALIZABLE)注释的,另一个方法B是用@Transactional(isolation = READ_COMMITED)注释的。
然后,让我们设想一些服务X依次调用这两个方法A和B。我的同事说,在Spring中,每个连接都设置事务级别。这意味着,如果这两个顺序调用使用来自池的相同连接,那么事务A和B = SERIALIZABLE的隔离级别。
然而,对我来说,这似乎有点奇怪。我希望这两个事务具有不同的隔离级别,因为所有sql数据库都允许显式地设置给定事务的隔离级别。
我试着阅读文档,却找不到一个地方可以提到超越级别是分配给连接的。
有人能在这个问题上对我们作出判断吗?
发布于 2018-02-09 12:59:29
如果在调用方法A()或B()时没有启动事务,则在调用该方法时创建一个新事务,并在离开该方法时关闭该事务。使用的连接返回到池或关闭。
这个线程解释了当事务关闭时连接发生了什么:
Does Spring close connection after committing transaction?
如果存在一个包含这两个方法的事务,则这两个方法只使用一个连接;我猜隔离级别是由更大的事务定义的。
https://stackoverflow.com/questions/48703767
复制相似问题