在此示例中,执行上下文用于处理未来。
当 Scalike 有一个内置的连接池时,为什么要使用它?
Future 不应该使用其中一个池线程来执行吗?ForkJoin 一个线程只是为了等待 Future 而另一个线程执行 IO 工作似乎是一种真正的浪费。
http://scalikejdbc.org/documentation/transaction.html
object FutureDB {
implicit val ec = myOwnExecutorContext
def updateFirstName(id: Int, firstName: String)(implicit session: DBSession): Future[Int] = {
Future {
blocking {
session.update("update users set first_name = ? where id = ?", firstName, id)
}
}
}
def updateLastName(id: Int, lastName: String)(implicit session: DBSession): Future[Int] = {
Future {
blocking {
session.update("update users set last_name = ? where id = ?", lastName, id)
}
}
}
}
object Example {
import FutureDB._
val fResult = DB futureLocalTx { implicit s =>
updateFirstName(3, "John").map(_ => updateLastName(3, "Smith"))
}
}
Example.fResult.foreach(println(_))