[英]Spring @Transactional how to “stop” transaction
我有一个控制器,该控制器在服务类上调用方法,该方法应执行以下操作:
(1)和(2)应该是原子的,并且如果都成功,则应该发送电子邮件。 如果我用@Transactional注释服务方法,即使数据库更新失败(这也是不希望的),也会发送电子邮件。 此外,如果电子邮件失败,则将回滚数据库更新(也不希望这样做)。
我的理解是,将3.转移到同一服务类上的单独方法将无济于事。 用@Transactional和其他传播行为(例如NEVER或REQUIRES_NEW)注释sendEmail方法似乎也没有帮助。
是否可以通过适当的注释来实现此行为?
您需要在前两个步骤中进行交易,然后提交交易,最后发送电子邮件。 最简单的方法是引入一个额外的bean
控制器:
beanA.process();
豆A:
// not transactional
public void process() {
beanB.updateDatabase();
sendEmail();
}
private void sendEmail() {
...
}
豆B:
@Transactional
public void updateDatabase() {
dao1.update();
dao2.update();
}
如果要停止事务并进行回滚,则抛出新的RunTimeException("log message here")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.