Spring @Transactional on 类与方法

Posted

技术标签:

【中文标题】Spring @Transactional on 类与方法【英文标题】:Spring @Transactional on class vs on method 【发布时间】:2015-02-23 04:53:29 【问题描述】:

我正在使用Spring BootSpring Data JPA

有以下课程:

import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRED)
public class Foo

    public void bar()


bar() 和任何其他成员方法是否也是事务性的?

我还有第二个问题。在许多教程中,人们倾向于这样做:

import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public class Foo

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void bar()


为什么?使用readOnlytruefalse 是否与安全有关?

【问题讨论】:

是的。文档中对此进行了非常清楚的解释:docs.spring.io/spring/docs/4.1.x/spring-framework-reference/… 这里有两个问题:第一个问题是当注解在类级别时,哪些方法是事务性的。第二个问题是关于在方法级别覆盖注释。我仍然看不到第一个问题的答案。想法? 【参考方案1】:

方法级别的注解完全覆盖了类型级别的注解。

类级别的@Transactional注解将应用于类中的每个方法。

但是,当使用 @Transactional 注释方法时,这将优先于在类级别定义的事务设置。

【讨论】:

@ex3v 你的问题已经被这个答案回答了。再读一遍。 对不起,我不清楚。我了解您关于类级别与方法级别的回答。我只是不明白为什么人们在类级别使用readOnly = true 而在方法级别使用readOnly = false @ex3v 因为他们希望类的所有方法默认都是只读的,除了那些用 readOnly=false 注释的方法。 @ex3v 来自here的任何帮助

以上是关于Spring @Transactional on 类与方法的主要内容,如果未能解决你的问题,请参考以下文章

Grails @Transactional 与 Spring @Transactional 注释之间的差异

Spring - @Transactional - 在后台发生了啥?

Spring @Transactional 和 Spring @Lock 注解有啥关系?

Spring @Transactional 使用

Spring @Transactional 只读传播

Spring @Transactional 属性是不是适用于私有方法?