java - Spring事务管理@Transactional行为

标签 java spring hibernate transactions spring-transactions

我想知道 Spring @Transactional 将如何适用于以下编码场景。在本示例中,我使用 Spring 4 + Hiberante 5 和 Oracle 19C 数据库。

示例 1:

@Service
public class UserService {
    @Transactional(readOnly = true)
    public void invoice() {
        createPdf();
        // send invoice as email, etc.
    }
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void createPdf() {
        // ...
    }
}

示例 2:

@Service
public class UserService {
    @Autowired
    private InvoiceService invoiceService;
    @Transactional(readOnly = true)
    public void invoice() {
        invoiceService.createPdf();
        // send invoice as email, etc.
    }
}
@Service
public class InvoiceService {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void createPdf() {
        // ...
    }
}

谢谢

最佳答案

示例 1:当您从服务内部调用 createPDF 方法时,@Transactional(REQUIRES_NEW) 注释将被有效地忽略 。不会有新的交易被打开。

示例 2:当您调用另一个包含在事务代理中的服务时,您将获得一个新事务,因为注释受到尊重。

您可能还想阅读这篇文章:Spring Transaction Management: @Transactional In-Depth

关于java - Spring事务管理@Transactional行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61089974/

相关文章:

java - 泛型类型列表的正确类型签名?

java - Ubuntu 14.04 - Oracle JDK 8 - JAVA_HOME 环境变量在哪里定义?

java - 添加外部属性文件打包war Spring Boot

java - 如何关闭 Ant 控制台中 hbm2ddl 的大部分输出?

hibernate - Play Framework 和集合在模型类中的使用

java - 自定义微调器适配器不工作

找不到 Spring 数据 jpa 存储库属性

java - Spring:没有 Hibernate Session 绑定(bind)到线程,并且配置不允许在此处创建非事务性 session

java - 如何在 Spring MVC JavaEE 中重定向到另一个站点

mysql - Hibernate、C3P0、Mysql——管道损坏