【问题标题】:Execute task after transaction ends - Grails事务结束后执行任务 - Grails
【发布时间】:2017-12-01 00:03:10
【问题描述】:

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

有什么办法吗?我已阅读文档,但找不到任何内容,只有正常事件,例如 afterUpdate 或 afterCommit。

谢谢!

【问题讨论】:

    标签: grails transactions


    【解决方案1】:

    您可以在当前会话中添加事件监听器

    sessionFactory.currentSession.addEventListener(...)

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

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

    【讨论】:

      【解决方案2】:

      这真的取决于你想要做什么。最好的办法可能是在服务上调用 @Transactional 方法,然后当它返回时,运行您需要在事务之后发生的代码。

      另一种选择,如果你只是想分拆一些任务来做一些简单的事情,你可以使用:

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

      这只是剥离一个新线程并在(在上面的示例中)1 秒后运行闭包主体的快捷方式...我相信闭包仍然可以访问注入的 grails 对象,但无法访问会议。不过,我会仔细检查一下。我已经在几个地方使用它来发送通知,这些通知需要等到事务中的某些处理结束后。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-22
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多