事务结束后执行任务-Grails

事务结束后执行任务-Grails,grails,transactions,Grails,Transactions,我需要在grails事务结束后执行一些任务。我不是在寻找Hibernate的afterCommit,相反,我需要在服务事务结束后调用一个方法 有办法吗?我已经阅读了文档,但是我找不到任何东西,只有像afterUpdate或afterCommit这样的正常事件 谢谢 这取决于你想做什么。最好的办法可能是对服务调用@Transactional方法,然后在返回时,运行事务后需要执行的代码 另一种选择是,如果您只想完成一些简单的任务,您可以使用: new java.util.Timer().runAft

我需要在grails事务结束后执行一些任务。我不是在寻找Hibernate的afterCommit,相反,我需要在服务事务结束后调用一个方法

有办法吗?我已经阅读了文档,但是我找不到任何东西,只有像afterUpdate或afterCommit这样的正常事件


谢谢

这取决于你想做什么。最好的办法可能是对服务调用
@Transactional
方法,然后在返回时,运行事务后需要执行的代码

另一种选择是,如果您只想完成一些简单的任务,您可以使用:

new java.util.Timer().runAfter(1000) { //time in milliseconds
  //code to run here
}

这只是一个派生新线程并在(在上面的示例中)1秒后运行闭包体的快捷方式。。。我相信闭包仍然可以访问注入的grails对象,但不能访问会话。不过我会再检查一遍。我已经在几个地方使用它来发送通知,这些通知需要等待事务内部的某些处理结束。

您可以将事件侦听器添加到当前会话中

sessionFactory.currentSession.addEventListener(…)

您只需要通过参数验证事务是否成功。还要了解,如果一个会话中有多个事务,那么将为每个事务调用侦听器

class MyListener extends BaseSessionEventListener {
    @Override
    void transactionCompletion(boolean successful) {

    }
}