我想知道 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/