Spring @Transactional on 类与方法
Posted
技术标签:
【中文标题】Spring @Transactional on 类与方法【英文标题】:Spring @Transactional on class vs on method 【发布时间】:2015-02-23 04:53:29 【问题描述】:我正在使用Spring Boot
和Spring 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()
为什么?使用readOnly
true
和false
是否与安全有关?
【问题讨论】:
是的。文档中对此进行了非常清楚的解释: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 - 在后台发生了啥?