【问题标题】:SpringBoot & nested transaction isolation level overrideSpringBoot & 嵌套事务隔离级别覆盖
【发布时间】:2022-01-04 06:03:03
【问题描述】:

春季启动,jdbc。

说到嵌套事务,我觉得有点滑..

假设有使用 MyRepository 的 MyService。

    @Named 
    @Transactional(isolation=Isolation.READ_COMMITTED) // READ_COMMITTED < SERIALIZABLE
    class MyService {
      void do() {
        myRepository.add(entity);
         ...
      }
    }
    @Repository
    class MyRepository {
         @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.SERIALIZABLE)
         void add(entity) {...}

    }

说,在这种情况下,我想确保 MyRepository 关心 add() 方法,确保它在它处理的表上设置最大级别锁定 Isolation.SERIALIZABLE

我不希望任何人覆盖它,因为它会导致并发问题。

(同样适用于传播级别)

问题:

在嵌套事务的情况下,myService.do() 的事务会覆盖myRepository.add 的隔离级别并使其不那么严格吗?

处理嵌套事务有哪些注意事项?

【问题讨论】:

标签: java spring-boot jdbc


【解决方案1】:

希望这会有所帮助: 根据@Transactional 注释的java 文档:

事务隔离级别。默认为 Isolation.DEFAULT。 专为与 Propagation.REQUIRED 或 Propagation.REQUIRES_NEW 因为它只适用于新开始 交易。考虑切换“validateExistingTransactions” 如果您想隔离,请在事务管理器上标记为“true” 参与现有项目时被拒绝的级别声明 具有不同隔离级别的事务。

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2020-06-07
    • 2010-11-05
    相关资源
    最近更新 更多