【问题标题】:No transaction behaviour needed in Spring DataSpring Data 中不需要事务行为
【发布时间】:2019-11-26 16:25:40
【问题描述】:

我试图弄清楚如何使用 Spring 配置一个不在事务中运行的方法。我读过 Spring Data 存储库默认激活其方法中的事务行为。我不想要这个事务,因为我有很多对存储库的“保存”调用,并且每个调用都相互独立。我认为为每次调用存储库方法创建事务会减慢代码和应用程​​序的性能。所以:

  • 这是可能的,还是每个服务或 dao 方法都必须在事务中运行?
  • 如果有,为什么?
  • 如果可能,如何配置不在事务中运行的方法?只是删除 Spring 事务注释?

谢谢

【问题讨论】:

    标签: spring-transactions


    【解决方案1】:

    默认情况下 Spring 服务 bean 不是事务性的。您可以在类或方法级别添加 @Transactional 以强制它是事务性的。这里有几个链接详细解释了 Spring 中的事务是如何工作的。
    What is the difference between defining @Transactional on class vs method .
    Spring - @Transactional - What happens in background? .
    https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html#tx-decl-explained

    在下面的帖子中也有讨论。
    Is Spring @Service transactional?

    【讨论】:

    • 但是 Spring Data 存储库呢?默认情况下,它们是事务性注释。如何覆盖这种行为?
    • 是的,Spring Repositories 默认为所有 crud 查询添加事务行为。我不完全确定这种方法,我可以提出两种解决方案。一是重写 crud 方法并排除 @Transactional 注释,二是创建一个单独的/新方法来保存数据。默认情况下,自定义方法在存储库中不是事务性的。看看下面线程的答案。 stackoverflow.com/questions/39827054/…
    猜你喜欢
    • 2011-08-06
    • 2021-12-22
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2018-08-07
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多