我想知道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() {
// ...
}
}
谢谢
答案 0 :(得分:1)
示例1 :当您从inside
服务中调用createPDF方法时,@ Transactional(REQUIRES_NEW)批注将有效地为ignored
。将没有新的交易打开。
示例2 :在您调用另一项服务(该服务包装在事务代理中)时,您将得到new transaction
,因为该注释受到尊重。
您可能还想阅读这篇文章:Spring Transaction Management: @Transactional In-Depth