我有一个控制器,该控制器在服务类上调用方法,该方法应执行以下操作:
(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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句