【发布时间】:2015-07-19 05:15:46
【问题描述】:
我有一个控制器,它调用一个服务类的方法,它应该执行以下操作:
- 更新数据库(使用 DAO 1)
- 更新数据库(使用 DAO 2)
- sendEmail(使用电子邮件服务)
(1) 和 (2) 应该是原子的,如果两者都成功,则应该发送电子邮件。如果我用 @Transactional 注释服务方法,即使数据库更新失败(这是不希望的),也会发送电子邮件。此外,如果电子邮件失败,则数据库更新将回滚(这也是不希望的)。
我的理解是,将 3. 移至同一服务类上的单独方法无济于事。使用 @Transactional 和不同的传播行为(例如 NEVER 或 REQUIRES_NEW)注释 sendEmail 方法似乎也无济于事。
是否可以通过适当的注释来实现该行为?
【问题讨论】:
-
你不能用 try/catch 包围你的 sendEmail 逻辑吗?
标签: java spring transactions transactional