有一个问题,我目前不得不处理。 Iam试图异步管理slick2.0事务。原因是我工作的期货。异步事务导致IllegalStateException
我写我自己的方法,用油滑异步处理会话:
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同样的问题。有人有想法吗?
帮助将不胜感激。 OliverKK
这很奇怪。我对Slick并不熟悉,但似乎偶尔会在DataSource上调用close()而不是连接,这是可能的吗? – brettw
在Slick上阅读后,它显示使用期货与会议是危险的,所以我不知道你想要做什么是可能的。请参阅文档[此处](http://slick.typesafe.com/doc/2.0.1-RC1/connection.html),搜索警告“escapes”一词。我会建议在Slick论坛上提问。 – brettw