java - Spring 交易级别范围

标签 java spring spring-boot spring-data spring-data-jpa

我正在使用 Spring Boot 1.4 并试图了解 Spring 事务管理的工作原理。

这是我的问题:

假设我有一个服务,方法 A@Transactional(isolation = SERIALIZABLE) 注释,另一个方法 B 注释使用 @Transactional(isolation = READ_COMMITED)

然后让我们想象一些服务 X 依次调用这两个方法 AB。 我的同事说事务级别是在 Spring 中为每个连接设置的。这意味着如果池中的相同连接用于这两个顺序调用,则事务 AB 的隔离级别 = SERIALIZABLE。

然而,对我来说这似乎有点奇怪。我希望这两个事务具有不同级别的隔离,因为所有 sql 数据库都允许为给定事务显式设置隔离级别。

我试图阅读文档,但找不到提到将事务级别分配给连接的地方。

有人可以在这个问题上评判我们吗?

最佳答案

如果在调用方法 A() 或 B() 时没有启动事务,则在调用方法时创建新事务,并在离开方法时关闭。使用的连接返回池或关闭。
此线程解释了事务关闭时连接发生的情况:
Does Spring close connection after committing transaction?

如果存在一个包含两种方法的事务,则只有一个连接用于两种方法;我猜隔离级别是由更大的事务定义的级别。

关于java - Spring 交易级别范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48703767/

相关文章:

java - 使用 select max() 然后插入 max() + 1 的 Hibernate 并发问题

java - 使用 spring-boot 在依赖注入(inject)中创建 bean 时出错

spring - 无法执行 DataJpaTest

javascript - 如果在 spring mvc 表单中触发提交按钮的点击函数会发生什么

java - 我可以使用 spring Remember-me 在浏览器重新启动后恢复浏览器 session 而不使用复选框吗

java - SpringJUnit4ClassRunner 中的 spring @Conditional

java - 我的 java 服务器在代码中间停止

java - 使用 aspectJ 在 spring 中记录异常?

java - 使用 Spring boot 和 Jackson 的日期时区

java - 如何为 JTextField 映射选项(Mac 键盘)的操作?