【问题标题】:Spring Boot Hibernate efficient transaction managementSpring Boot Hibernate 高效的事务管理
【发布时间】:2019-01-19 10:39:33
【问题描述】:

在与 Hibernate JPA 集成的 Spring Boot 应用程序中。事务管理有哪些不同且最有效的方法,以及针对各种场景需要考虑的关键点。

此时,我们在 Controller 层的服务层调用上使用了@Transactional 注解;服务层因此执行各种读/写 DAO 调用。带有@Transactional 的DAO 方法。

在必须直截了当的基本场景中,这很适合我们在单个服务层调用中对单个实体进行操作并且我们希望将完整的操作集包含在单个事务中。

但是,如果我们想要根据具体情况采取不同的行为呢?例如如果我们在服务层调用中对一组实体进行循环操作,并且虽然我们希望对每个实体的操作都是事务性的,但是如果我们不希望整个循环成为单个事务。或者,如果在对特定实体进行操作时,需要将多个操作作为工作流的一部分执行,则可能需要这些工作流的子集在出现异常/错误情况时不会影响在它们之前执行的操作在子集中。

我知道可能有很多不同的方法可以实现这一目标,但我一直在寻找最佳、最有效和最有效方法的线索。

提前致谢!!

【问题讨论】:

    标签: java spring hibernate spring-boot spring-transactions


    【解决方案1】:

    如果我们有一个循环在服务内的一组实体上运行 层调用,尽管我们希望对每个实体进行操作 事务性的,

    在事务方法中迭代非事务和处理交互项,或在@TransactionalPropagation.REQUIRES_NEW 中交互和处理事务

    https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html#isolation--

    最后,自己处理事务。 https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html

    或者,如果在对特定实体进行操作时,需要多个操作 要作为工作流的一部分执行,这些工作流的子集可以 希望对已执行的操作没有影响 在子集中出现异常/错误情况时在它们之前。

    典型的长时间运行的事务

    最好的办法是避免这种情况 - 例如分多个步骤创建合同草稿 - 并在最后 - 将该合同序列化为适当的实体并将其保存在单个事务中。

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 2017-05-29
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多