如何使afterInsert / afterUpdate GORM方法成为异步方法

时间:2014-09-18 08:15:42

标签: performance grails asynchronous aop

Grails用户知道该框架的数据访问层通过其他软层的分离跨层提供AOP编程:afterInsertafterUpdatebeforeInsert ....方法。

   class Person{

    def afterInsert(){
        //... Will be executed after inserting record into Person table
     }
  }

我在构造函数(实例化)中搜索此方法的类型:异步。我找不到答案。

我的问题:如果不是,如果我们强制这些方法是异步的,那么GORM是否会被打破。

更新:

事实上,我们希望在不使用ready插件的情况下发送邮件,因为我们拥有自己的API。

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现您的目标,并且在不了解您的所有要求的情况下,很难为您提供满足所有要求的解决方案。但是,根据您提出的问题和提供的评论,您可以使用Grails中内置的Asynchronous features来完成此任务。

这只是我头脑中出现的一个草图/例子。

import static grails.async.Promises.*
class Person {
  ...
  def afterUpdate() {
    def task1 = task {
      // whatever code you need to run goes here.
    }
    onComplete([task1]) {
      // anything you want to run after the task completes, or nothing at all.
    }
  }
  ...
}

这只是一个选择。同样,有很多选项可供您使用。您可以发送JMS消息,并在另一台计算机上处​​理它。您可以使用某种类型的事件系统,甚至可以使用Spring AOP和Thread池并进一步抽象。这取决于您的要求,以及您的能力。