在Slick中等待语句执行完成

时间:2017-09-21 11:29:43

标签: scala slick

在我的测试中,我有一些数据库操作未在测试级别显示为Future。有时,我的测试运行得足够快,在我的清理中close()发生在那些数据库操作完成之前,然后我得到了丑陋的错误。有没有办法检测有多少语句在飞行中或以其他方式阻止close()

2 个答案:

答案 0 :(得分:0)

当您执行查询时,您会得到Future[A],其中A是查询的结果。

您可以使用Future.sequence()撰写所有查询以获得单个未来composedFuture,这将在您的所有查询返回结果时完成。

现在您可以使用composedFuture.map(_ => close())确保所有查询都已完成执行,然后关闭资源。

最佳选择是将操作公开为将来,然后组合它们。 否则你可以放Thread.sleep(someSensibleTime)并希望你的未来在someSensibleTime内完成,但这将使你的测试变得缓慢和错误。

答案 1 :(得分:0)

我认为它可能依赖于数据库,而不是依赖于光滑。

例如,mysql技术允许您使用查询“show processlist”查看当前正在运行的查询,并采取相应的行动。

如果这不是一个选项,我想您可以轮询数据库以观察选定的副作用,然后关闭()?