如何在数据库访问中使用Future

时间:2017-02-15 13:26:49

标签: java database scala slick future

我在混合的Java / Scala程序中使用了slick Java代码需要从数据库中获取一些数据。
据我了解,推荐的方法是从数据库中获取Future,但我该如何从这里开始?我被迫等待结果(使用阻止Await.result)?我可以使用onComplete使Java与Scala类似吗?

当前(阻止)代码:

光滑的[斯卡拉]:

def getUser(email: String): Option[User] = {  
    val findUser = users
        .filter(_.email === email)
        .result
        .headOption

    Await.result(db.run(findUser), Duration(1000, "millis")) // blocking :-(
}

爪哇:

if(UsersDataBase.getUser(email).isDefined()) {
...
}

1 个答案:

答案 0 :(得分:2)

您需要将Scala Future转换(或换行)为Java Future。与Option

相同

现在您可以使用repo

简单的例子是:

import scala.compat.java8.FutureConverters._
import java.util.concurrent.CompletionStage
import scala.concurrent.Future


val javaFuture:CompletionStage[String] = Future.successful("ok").toJava