Asynchronous Grails4与数据库操作异步

Asynchronous Grails4与数据库操作异步,asynchronous,grails,grails-4,Asynchronous,Grails,Grails 4,我的Grails4.0.10应用程序需要调用外部服务。调用可能需要3分钟,因此必须是异步的。在阅读doco之后,我编写了一个非阻塞服务方法,使用Promise执行调用,不会有太多麻烦 文档描述了如何显示异步结果 在我的例子中,结果会影响数据库。我必须创建新的域对象,修改现有的域对象,并将结果保存在onComplete闭包中。doco对如何做到这一点相当沉默 这些是我关于onComplete闭包的假设。我的问题是:这些假设有效吗?这是正确的方法吗 没有可用的注入内容,服务和(例如)log——您通常

我的Grails4.0.10应用程序需要调用外部服务。调用可能需要3分钟,因此必须是异步的。在阅读doco之后,我编写了一个非阻塞服务方法,使用Promise执行调用,不会有太多麻烦

文档描述了如何显示异步结果

在我的例子中,结果会影响数据库。我必须创建新的域对象,修改现有的域对象,并将结果保存在
onComplete
闭包中。doco对如何做到这一点相当沉默

这些是我关于
onComplete
闭包的假设。我的问题是:这些假设有效吗?这是正确的方法吗

  • 没有可用的注入内容,服务和(例如)
    log
    ——您通常在服务中期望的东西都不可用
  • 数据库逻辑必须首先包含在
    租户中。如果使用多租户,则必须包含在
    with transaction
    中,然后包含在
    with transaction中
  • withTransaction
    以域名作为前缀。但是,其他域可以在同一个闭包中自由操作和持久化
  • 在异步调用之前拾取的域实例可以像下面这样附加到当前会话
    instance.attach()
    ,然后进行修改和保存
  • 如果需要日志记录,请创建一个新的日志实例