-1
以下のコードは '1'を出力し、 '2'を出力しません。結果として、index
メソッドで処理されるページを要求するとブラウザがハングします。将来は決して呼び出されません。 future.map
ステートメントがAwait.result(future, Duration.Inf)
に置き換えられた場合、コードは正常に動作します。何が問題ですか?Slickトランザクションの未来がScalaのPlayで呼び出されない
case class UserRole (sk: Int, name: String)
class UserRoleDB(tag: Tag) extends Table[UserRole](tag, "user_roles") {
def sk = column[Int]("sk", O.PrimaryKey)
def name = column[String]("name")
def * = (sk, name) <> ((UserRole.apply _).tupled, UserRole.unapply)
}
class Test extends Controller {
def index = Action.async { request =>
val db = Database.forConfig("db1")
val userRoles = TableQuery[UserRoleDB]
val ur = UserRole(1002,"aaa")
try {
val action = (for {
userRole2 <- userRoles += ur
} yield (userRole2)).transactionally
val future = db.run(action)
println(1)
// val result = Await.result(future, Duration.Inf)
future.map { result => {
println(2)
Ok("Finished OK")
}
}
}
finally db.close
}
}
問題はfuture.mapが実行される前に接続が閉じられていたことでした。 – ps0604