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