@Service
class UserSerivce{
@Transactional
public void invoice(){
createPdf();
}
@Transactional(propagation= Propagation.REQUIRES_NEW)
public void createPdf(){}
}
在调用invoice()方法时,Spring创建了一个proxy,并代开了一个transaction。不会再为第二个方法createPdf再开个transaction。

@Service
public class UserService {
@Autowired
private InvoiceService invoiceService;
@Transactional
public void invoice() {
invoiceService.createPdf();
// send invoice as email, etc.
}
}
@Service
public class InvoiceService {
@Transactional
public void createPdf() {
// ...
}
}
只会有一个事务被打开
public class UserService {
@Autowired
private InvoiceService invoiceService;
@Transactional
public void invoice() {
invoiceService.createPdf();
// send invoice as email, etc.
}
}
@Service
public class InvoiceService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createPdf() {
// ...
}
}
加上propagation变成两个事务
本文深入探讨了Spring框架中事务传播机制的运作原理,通过具体的代码示例,展示了当一个事务方法调用另一个事务方法时,如何根据@Transaction注解的propagation属性设置来决定是否开启新的事务。这对于理解并正确配置复杂业务场景下的事务边界至关重要。
3602

被折叠的 条评论
为什么被折叠?



