我正在使用 Spring Boot 1.4 并试图了解 Spring 事务管理的工作原理。
这是我的问题:
假设我有一个服务,方法 A
用 @Transactional(isolation = SERIALIZABLE)
注释,另一个方法 B
注释使用 @Transactional(isolation = READ_COMMITED)
。
然后让我们想象一些服务 X
依次调用这两个方法 A
和 B
。
我的同事说事务级别是在 Spring
中为每个连接设置的。这意味着如果池中的相同连接用于这两个顺序调用,则事务 A
和 B
的隔离级别 = SERIALIZABLE。
然而,对我来说这似乎有点奇怪。我希望这两个事务具有不同级别的隔离,因为所有 sql 数据库都允许为给定事务显式设置隔离级别。
我试图阅读文档,但找不到提到将事务级别分配给连接的地方。
有人可以在这个问题上评判我们吗?
最佳答案
如果在调用方法 A() 或 B() 时没有启动事务,则在调用方法时创建新事务,并在离开方法时关闭。使用的连接返回池或关闭。
此线程解释了事务关闭时连接发生的情况:
Does Spring close connection after committing transaction?
如果存在一个包含两种方法的事务,则只有一个连接用于两种方法;我猜隔离级别是由更大的事务定义的级别。
关于java - Spring 交易级别范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48703767/