春季交易管理@交易行为

时间:2020-04-07 21:53:12

标签: 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 个答案:

答案 0 :(得分:1)

示例1 :当您从inside服务中调用createPDF方法时,@ Transactional(REQUIRES_NEW)批注将有效地为ignored。将没有新的交易打开。

示例2 :在您调用另一项服务(该服务包装在事务代理中)时,您将得到new transaction,因为该注释受到尊重。

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