【发布时间】:2017-12-01 00:03:10
【问题描述】:
我需要在 grails 事务结束后执行一些任务。我不是在寻找 Hibernate 的 afterCommit,而是在服务的事务结束后调用一个方法。
有什么办法吗?我已阅读文档,但找不到任何内容,只有正常事件,例如 afterUpdate 或 afterCommit。
谢谢!
【问题讨论】:
标签: grails transactions
我需要在 grails 事务结束后执行一些任务。我不是在寻找 Hibernate 的 afterCommit,而是在服务的事务结束后调用一个方法。
有什么办法吗?我已阅读文档,但找不到任何内容,只有正常事件,例如 afterUpdate 或 afterCommit。
谢谢!
【问题讨论】:
标签: grails transactions
您可以在当前会话中添加事件监听器
sessionFactory.currentSession.addEventListener(...)
class MyListener extends BaseSessionEventListener {
@Override
void transactionCompletion(boolean successful) {
}
}
您只需要通过参数验证交易是否成功。还要了解,如果单个会话中有多个事务,则将为每个事务调用侦听器。
【讨论】:
这真的取决于你想要做什么。最好的办法可能是在服务上调用 @Transactional 方法,然后当它返回时,运行您需要在事务之后发生的代码。
另一种选择,如果你只是想分拆一些任务来做一些简单的事情,你可以使用:
new java.util.Timer().runAfter(1000) { //time in milliseconds
//code to run here
}
这只是剥离一个新线程并在(在上面的示例中)1 秒后运行闭包主体的快捷方式...我相信闭包仍然可以访问注入的 grails 对象,但无法访问会议。不过,我会仔细检查一下。我已经在几个地方使用它来发送通知,这些通知需要等到事务中的某些处理结束后。
【讨论】: