想知道是否有一种方法可以sql.eachRow像生成器一样使用它,以便在需要Collection或Iterator的DSL上下文中使用它.我正在尝试使用的用例是流式JSON生成 - 我正在尝试做的是:
def generator = { sql.eachRow { yield it } }
jsonBuilder.root {
status "OK"
rows generator()
}
Run Code Online (Sandbox Code Playgroud)
您需要持续的支持(或类似的支持)才能使其在某种程度上发挥作用。Groovy 没有延续,JVM 也没有。通常,延续传递风格是有效的,但方法eachRow必须支持这一点,但它当然不支持。所以我看到的唯一方法是使用线程或类似的东西的临时解决方案。所以也许类似的东西对你有用:
def sync = new java.util.concurrent.SynchronousQueue()
Thread.start { sql.eachRow { sync.put(it) } }
jsonBuilder.root {
status "OK"
rows sync.take()
}
Run Code Online (Sandbox Code Playgroud)
我并不是说这是一个很好的解决方案,只是针对您的问题的随机消费者生产者解决方法。
| 归档时间: |
|
| 查看次数: |
2361 次 |
| 最近记录: |