【发布时间】:2010-08-16 10:37:58
【问题描述】:
我在我的服务层中使用 Spring 应用程序事件来在特定事件发生时通知更广泛的系统。我遇到的问题是事件是在事务上下文中触发的(我使用的是 Spring 的 @Transactional 注释)。危险是我触发了一个事件,然后事务在提交时失败(例如,在使用 Hibernate 时可能发生)。在这种情况下,事件侦听器将假设某些状态,然后在它们执行后回滚。这里的危险是,例如,我可能已经发送了一封电子邮件来确认用户在网站上的注册,而实际上他们的用户帐户并未真正创建。
有没有办法保留注释的使用,在某处标记事务提交后要触发的事件?这有点类似于在 Java Swing 中进行 GUI 编程时使用SwingUtilities.invokeLater(Runnable runnable)。我想说,一旦当前事务成功提交,稍后再执行这段代码。
有什么想法吗?
谢谢,
安德鲁
【问题讨论】:
-
这一切现在都在 Spring 中通过注释本地处理。请参阅spring.io/blog/2015/02/11/…,特别是有关新的@TransactionalEventListener 注释的部分。
标签: spring transactions