【问题标题】:How to handle multiple transaction in spring春季如何处理多笔交易
【发布时间】:2015-07-13 06:29:31
【问题描述】:

您好,任何人都可以帮助我了解如何在春季处理多笔交易。例如,我正在尝试在我的应用程序中注册用户。我已经从我的 UI 层收集了数据。现在我需要做以下活动

  1. 将数据保存到数据库的多个表中。
  2. 需要向用户发送包含用户名和密码的电子邮件和短信
  3. 向管理员发送通知电子邮件
  4. 更新一些其他表值。

现在,如果上述 4 个步骤出现问题,应用程序应该能够恢复所有内容并显示错误消息。

春季如何处理这些任务?

【问题讨论】:

  • 太宽泛了,到目前为止你尝试过什么?
  • 欢迎使用 stackoverflow。请向我们展示您的一些工作,当您遇到困难时,社区会帮助您,但这里没有人会完成您的工作..
  • “现在,如果上述 4 个步骤出现问题,应用程序应该能够恢复所有内容” 只需在单个事务中运行它而不是多个事务?
  • @BalusC 我还没有看到交易邮件和短信服务。尽管您可以尝试发送取消电子邮件...

标签: java spring transactions


【解决方案1】:

您需要使用@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

【讨论】:

    【解决方案2】:

    没有办法将电子邮件发送视为与数据库一样的事务资源! 电子邮件一旦发送,就很难将其收回。在这个领域,只是缺少提供数据库所获得的所有方便的事务提交和回滚功能的基础架构。

    您最好的解决方法是成功提交数据库更新后发送电子邮件。您可以使用 Spring 的 DataSourceTransaction Manager 和 @Transactiondoing this with Spring 的其他“两千”方式之一使您的数据库更新成为事务性的。

    要在交易后提交您的电子邮件,请查看this question。就个人而言,我赞成在提交挂钩后使用事务 将“email-trigger-messages”发送到独立的消息队列,如HornetQ。这样,您就可以使用队列的开箱即用故障转移机制来确保您的电子邮件一定会送达。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 2014-05-28
      • 1970-01-01
      相关资源
      最近更新 更多