我们在AWS上遇到了slick 3.0和postgres数据库(9.5)的问题,其中slick打开一个事务但似乎没有提交它,留下一个打开的连接"空闲的事务"期货永远不会完成。
我们只是致电db.run(saveRow(row).transactionally.asTry)
,其中
private def saveRow(row: Row): DBIO[Int] = {
val getExistingRow: DBIO[Option[Row]] = table.filter(_.id === row.id).result.headOption
getExistingRow.flatMap((existingRow: Option[Row]) =>
existingRow match {
case None => table += row
case Some(row) =>
table.filter(_.id === row.id).map(_.propety).update(row.property)
}
)
}
现在,从getExistingRow
创建的第一个select语句尚未完成。它在本地工作,但在AWS上生产时,所有准备好的语句都不会被提交。来自slick.backend
的日志只显示
#1: Start transaction
#2: StreamingInvokerAction$HeadOptionAction [select ...]
我们希望从slick.backend
(我们在本地看到它们)获得以下更多日志,但我们不会看到它们。
#3: SingleInsertAction [insert into ...]
#4: Commit
我是否需要提供一些配置设置才能在Slick,HikariCP或postgres数据库一侧工作,以解决这个问题?关于如何解决这个问题的任何其他想法?
答案 0 :(得分:0)
它实际上是由使用播放执行上下文引起的。当切换到scala默认执行上下文时,它工作正常。