我目前必须处理一个问题。我正在尝试异步管理 slick2.0 事务。原因是我使用的期货。
我编写了自己的方法来使用 slick 异步处理会话:
def withAsyncTransaction[T](implicit block: Session => Future[T]): Future[T] = {
val session = Database.forDataSource(dataSource).createSession()
session.conn.setAutoCommit(false)
block(session).recover {
case e: Exception =>
session.conn.rollback()
session.conn.close()
throw e
}.map { v =>
session.conn.commit()
session.conn.close()
v
}
}
我像这样使用它(注入数据源):
withAsyncTransaction { implicit session =>
... CRUD
}
堆栈跟踪:
The datasource has been shutdown.
java.lang.IllegalStateException: The datasource has been shutdown.
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:62)
该错误是偶尔发生的,它不依赖于连接池。boneCP 也有同样的问题。有人有想法吗?
帮助将不胜感激。奥利弗KK