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