【问题标题】:Does @Transactional annotation avoid concurrent access to business layer methods@Transactional 注解是否避免并发访问业务层方法
【发布时间】:2018-01-17 09:16:33
【问题描述】:

我对在业务/服务层使用@Transactional注解有点不清楚。

我的问题是,当在业务层与 ISOLATION_SERIALIZABLE 一起使用时,@Transactional 注释是否保证不允许对特定方法进行并发访问?

@Transactional(isolation = Isolation.SERIALIZABLE)
public void businessMethod() {

    // calls subBusinessMethod
    subBusinessMethod();
    ---------------
    ---------------
    ---------------

}

想象subBusinessMethod 调用 DAO 层来执行一些数据库事务。调用subBusinessMethod 之后的代码执行(可能更多的db 调用)取决于subBusinessMethod 中发生的db 事务的结果。

我需要确保对businessMethod 的后续调用不应该调用 dao 层来读取/写入数据库,而不知道之前调用的 db 表发生了什么。业务逻辑中添加了必需的验证。

首先,我的方法有效吗?如果是这样,我是否以正确的方式使用它。 ?

【问题讨论】:

    标签: java spring hibernate transactions transactional


    【解决方案1】:

    没有。 @Transactional 属性直接映射到数据库级别。该方法可以并且将被同时访问(只有synchronized 或其他锁定可以防止这种情况发生)。

    另一方面,底层数据库事务将在可序列化隔离的情况下执行,即事务的最终结果必须就像每个事务一个接一个地运行(即使它们不是真正一个接一个地运行)。

    根据您的要求,这似乎是一种可行的方法。但它可能不是唯一的,甚至不是最好的。

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 2023-03-11
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多