嗨,请允许任何人帮我解决如何在春季处理多笔交易。例如,我正在尝试在我的应用程序中注册用户。我从UI层收集了数据。现在我需要做以下活动
现在,如果上述4个步骤出现问题,应用程序应该能够还原所有内容并显示错误消息。
我如何在春天处理这些任务?
答案 0 :(得分:0)
您需要使用@Transactional注释将数据库修改包装到服务中,并更改您刚才所说的内容的顺序。
//This two step in the same service with @Transactional annotation.
1. save the data into multiple tables in database.
2. update some other table value.
//Once you save on database and everything it´s ok you can send emails without any problem since you dont have to rollback.
3. send an email & sms to the user containing username and password
4. send an notification email to admin
答案 1 :(得分:0)
无法将电子邮件发送视为与数据库相同的交易资源!一旦发送了电子邮件,就很难将其回拨。在这个领域,只缺少基础设施,它提供了数据库带来的所有方便的事务提交和回滚功能。
您最好的解决方法是在成功提交数据库更新后发送电子邮件。您可以使用Spring的DataSourceTransaction
经理和@ Transaction
或doing this with Spring的其他“两千”方式之一使您的数据库更新为事务性。
要进行交易后发送电子邮件,请检查this question。就个人而言,我赞成在提交挂钩之后使用事务将“email-trigger-messages”发送到独立的 Message Queue ,如HornetQ。这样,您就可以使用队列的开箱即用故障转移机制来确保您的电子邮件一定能够交付。