交易结束后执行任务 - grails



我需要在TransAction结束时执行某些任务。我不是在寻找冬眠的后邮政局,而是需要在服务交易结束后调用一种方法。

有什么办法吗?我已经阅读了该文档,但找不到任何东西,只有正常事件,例如AfterUpdate或AfterCommit。

谢谢!

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

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对象,但无法访问会议。我会仔细检查一下。我在几个地方使用了此信息,用于发送需要等待的通知,直到交易中的某些处理结束后。

最新更新