有一個問題,我目前不得不處理。 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