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

How to use Future in database access

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

当前(阻塞)代码:

圆滑 [Scala]:

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

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

Java:

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

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

相同

在这几天你可以使用scala-java8-compat

简单的例子是:

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


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